用代码完美替换All in One SEO插件最新方法

时间: 2010-04-13 / 分类: WordPress, 搜索引擎优化(SEO) / 浏览次数: 12,787 views / 33个评论 发表评论

很多网友向老七反映,wordpress博客中用了All in One SEO插件后网站速度明显变慢,百度收录也不太正常,比较勤一点的站长向老七征求通过修改代码的方式达到完美替换掉wordpress博客中All in One SEO插件的效果,甚至比All in One SEO插件效果更好,老七研究了两天,终于大功告成了,老七在信心,通过代码修改的方式达到的效果比All in One SEO插件更好!现在老七网络推广博客也彻底抛弃了All in One SEO插件,现将方法详细解说:

首先通过百度搜索关于用代码替换All in One SEO插件的文章,发现很少,甚至可以说没有,因为那些方法已经不太适合现在2010年的SEO情况,老七自己钻研了一下All in One SEO插件的原理,再结合过滤等技巧,终于达到了非常理想的效果!

WordPress 主题提供的keywords和description这两个meta标签一般都做得很差,或者根本就不提供,这样不利于SEO。本文将指导你如何给主页、分类、页面以及文章页添加单独的Description 和 Keywords。

很多人都在用All in One SEO插件解决这个问题,但是又有很多人说这个插件不好。老七可以直接肯定的告诉你:赶紧换成代码吧,如果想做实力技术型站长的话!

注意哦,精彩在最后面,关于自动截取文章描述作为description的代码,其中还包含了过滤一些字符的代码!

All in One SEO 一度被认为是必备 Wordpress 插件,它的标准化 title 结构、自动用 tag 作为关键字(keywords)自动生成页面描述(description)和分类等页面的 noindex 功能几乎是大家的标准化设置。但是恰恰是这些,让你的 blog 在 SEO 上减分。

原因一:noindex 导致百度不收录内容
百度爬虫很傻的,看到 noindex 就 k 掉全部只留一个首页,或者最近的内容不收录。这就是坊间流传的所谓百度不收录 wordpress 的根源,其实罪在 All in One SEO。

原因二:自动描述导致丢失描述
老七一度的 google 搜索存档信息里除了标题就剩下文章信息(日期作者什么的),然后就是评论。原因是启用了 All in One SEO 的自动 description,但是英文还好,对于大部分页面它压根无法生成中文 description,而你有一个空白 description 在这里搜索引擎就不给你自动 description 了。

原因三:All in One SEO 很耗资源
这个有待验证。昨天我去掉它以后,很多人包括我自己在内都感觉到马上速度快了很多。

那么,去掉以后,如果保证必要的 SEO 措施

之一:title 结构
这个很重要,如果你一直用“标题 - 站名”这样的结构千万别改,否则可能被搜索引擎惩罚。保持原有结构我们在 header.php 里加了(或替换原有 title 部分)这么一句:
<title><?php if (is_home() ) { ?>老七 - digg digest<?php } else {?><?php wp_title(''); ?> - 老七<?php } ?></title>
意思很简单。blog 名和描述直接写的目的是尽量减少执行函数。

之二:关键字和站点描述
在 header.php 里,用下面这段代码来代替原来默认模板里的同类代码:
<?if (is_home()){
$description = "你的站点描述";
$keywords = "你的关键字";
} elseif (is_single()){
$description = $post->post_title ;
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag ) {
$keywords = $keywords . $tag->name . ", ";
}
} elseif(is_category()){
$description = category_description();
}
?>
<meta name="keywords" content="<?=$keywords?>" />
<meta name="description" content="<?=$description?>" />

之三:文章描述
这个有两个办法,一是用截断文章前多少字(貌似有相应插件)的摘要作为描述,另一个就是利用 All in One SEO 的原理,利用自定义关键字(custom field)定义 description 然后调用,具体操作可参考这篇,代码是:
<?php if ( is_single() ) { ?>
<meta name="description" content="<?php $key="description"; echo get_post_meta($post->ID, $key, true); ?>" />
<?php } ?>

如果没用过 All in One SEO 插件的,可以先新建一个 description 关键字,下次就可以选择了。

之四:NoIndex
既然百度爬虫太傻逼,那就针对 Google 爬虫写,在 header.php 里加这么一句:
<?php if ( !(is_home()) and !(is_single()) ) { ?><meta name="Googlebot" content="noindex,follow" /><?php }?>
意思就是除了首页和文章,其它页面最好不要 index。另外据我个人的经验,这句话前面最好加个空行。

未完:也许很多人认为到这里就该结束了,老七刚开始也是这么觉得的,但后来仔细分析了一下,这里对于description(文章描述)做的还不够好,因为代码是将title直接给了description,也就是description=title(文章描述和标题一样),与其这样做,还不如将description空着,因为description和title一样是SEO中要避免的问题,帮老七又另外对description进行了一翻修改,终于达到了理想的效果!

下面看看老七怎么自动截取文章描述,过滤相关字符的吧!

第一步:在模板文件里找到functions.php,将最前面<?php 改成:

<?php
    function sub_str($str, $start = 0, $length = 0, $append = true , $appendstring = ‘…’)
{
 $str = trim($str);
 if ($length == 0)
 {
  return $str;
 }

 /*if (function_exists(‘mb_substr’))
 {
  $newstr = mb_substr($str, $start, $length, ‘UTF-8′);
 }
 else
 {*/
  $strlength = strlen($str);

  if ($length < 0)
  {
   $length = $strlength + $length;
  }
  elseif ($length >= $strlength)
  {
   return $str;
  }
  $newstr = preg_replace(‘#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,’ . $start .  ‘}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,’ . $length . ‘}).*#s’, ‘$1′, $str);
 //}

 if ($append && $str != $newstr)
 {
  $newstr .= $appendstring;
 }

 return $newstr;
}

第二步:在header.php里面将定义文章页描述的内容修改为如下语句:

 elseif (is_single())
     {
$description  = strip_tags($post->post_content);
$description  = str_replace(“\r\n”, ” ,$description );
$description  = str_replace(“&nbsp” , ” ,$description ) ;
       $description = trim(sub_str($description , 0 , 120 , false));
       $keywords = “”;
       $tags = wp_get_post_tags($post->ID);
       foreach ($tags as $tag )
       { $keywords = $keywords . $tag->name . “, “;  }
     }

注解:

$description  = str_replace(“\r\n”, ” ,$description );
$description  = str_replace(“&nbsp” , ” ,$description ) ;

表示空格和回车过滤!

$description = trim(sub_str($description , 0 , 120 , false));
120表示描述字符数,wordpress编码的原因,写成120效果最好!

写到这里,差不多就完成了!不知不觉已经很晚了,希望对大家有用!

本文首发于:老七网络推广博客 [http://www.lao7.net]

33个评论

  1. 信念一博
    2010/11/08 于 06:09:11

    老七您好,先是感谢
    不过我按你的一步一步来,到最后,前台页面刷新之后显示
    ‘Parse error: syntax error, unexpected T_STRING in /home/a2433759/public_html/wp-content/themes/librio/header.php on line 16’

    ,多次实验还是一样,博客搬家了正在重建,如果您有闲时,可以将我的functions文件发给你,帮我看一下,谢谢

  2. 酷剑
    2010/10/16 于 13:01:14

    你好,可以给我的邮箱发一份这个吗?我粘贴了你的代码后出错了。不知道为什么?

  3. 纯野
    2010/09/22 于 13:13:17

    用z-blog的表示看了没多大作用。

  4. 哈尔滨SEO
    2010/09/05 于 11:57:22

    老七你好,你加我QQ好吗 我弄了好久没有更改成功。希望你可以帮我下。谢谢。QQ76565111

    • lao7(老七)
      2010/09/05 于 12:46:51

      老七修改过的header文件和functions.php文件已经发到你邮箱了,如果还有什么问题,欢迎随时来交流哦!

  5. taojin111
    2010/09/05 于 06:37:01

    老七呀,你这个代码改了没用呀,具体是在哪里操作,在主题里操作还是哪里?如果可以的话,把代码发一下我的邮箱里吧?362074094@qq.com下面是我的站,主题跟你的一样www.firejuly.com

    • lao7(老七)
      2010/09/05 于 12:52:48

      已经发到你邮箱了,如果还有什么问题,欢迎随时来交流哦!

  6. 赵福安
    2010/08/26 于 17:27:35

    感觉这款插件和百度确实有冲突,我的博客现在还在用这插件,在针对百度seo方面,其实DEDECMS做得比WP要好。。。然后也麻烦老七将代码发到我邮箱一下哈,感谢!麻烦了。

  7. 龙的传人
    2010/08/21 于 02:05:29

    老七可以把最后两段代码发到我的邮箱吗?(从functions开始),代码我不会修改,试了一下,不得行。

    • lao7(老七)
      2010/08/21 于 12:39:37

      好的,请到邮箱查收一下,欢迎常来交流!

      • 龙的传人
        2010/08/22 于 00:03:31

        谢谢老七昨晚的帮助,现在描述已经搞好了。我不懂PHP,但我会常来学习的~

  8. 龙的传人
    2010/08/21 于 01:09:16

    我看你的百度比GG收录得还多,老七真是厉害啊

  9. 宅猫
    2010/08/16 于 02:38:48

    看来我博客不怎么被收录是这个原因啊。

  10. 就抢网
    2010/08/11 于 02:01:03

    老七你的招现在还管用吧?能发到我邮箱吗?

  11. 大可可的故事
    2010/08/09 于 23:58:00

    老7哥,你经过你修改的header文件和functions.php文件能不能发个到我的邮箱啊!我的修改好像不成功啊!我的邮箱是:651016236@qq.com。在这里谢谢7哥了

    • lao7(老七)
      2010/08/10 于 14:12:17

      已经发送到你邮箱,请查收,欢迎常来老七网络推广博客交流哦~

  12. 奶牛
    2010/07/02 于 17:50:33

    这总结,那是相当全面呐,赞~~~~

    • lao7(老七)
      2010/07/03 于 04:16:21

      呵呵,多谢夸奖!网站优化就必须注重细节哦!

  13. [...] 用代码完美替换All in One SEO插件最新方法 (http://www.lao7.net/allinoneseo/) [...]

  14. merror
    2010/06/06 于 13:05:10

    嗯,很专业~
    你看看我博客首页,标题“寐罗” 左边有个左箭头,能用

    这句改掉吧。

  15. 陆晓东
    2010/05/18 于 02:58:19

    老七 还懂代码啊,很有前途! 不错!

  16. [...] 用代码完美替换All in One SEO插件最新方法(http://www.lao7.net/allinoneseo/) [...]

  17. [...] 老七网络推广博客域名(www.lao7.net)注册时间:2010年3月23日,备案4月初通过,一直没上线,处于本地调试阶段,因为老七以前没有接触过wordpress程序;等老七把wordpress程序熟悉了,基本上文章也发布的差不多了,只等着上线,其中有一点值得提出的是老七抛弃了all in one seo插件,用代码完美替换了all in one seo插件![参考老七的博文:用代码完美替换All in One SEO插件最新方法] [...]

  18. itopdog
    2010/04/15 于 13:56:39

    怎么没有图片显示

  19. www.41de.com
    2010/04/15 于 04:39:00

    好不好使···老七··

    • lao7(老七)
      2010/04/15 于 04:40:08

      老七自己的博客就是这么做的,没问题,绝对好使!

      • 41de
        2010/04/16 于 08:01:06

        我不会改···囧· ··

        • 41de
          2010/04/17 于 21:21:55

          老七,你一般几点上线啊··我不会该,想联系你但联系不到···

          • lao7(老七)
            2010/04/18 于 04:12:06

            老七一般晚上8点以后上线,中午12点半到1点在线,你加我QQ,晚上联系老七哦~

  20. 伤感屋
    2010/04/13 于 23:27:19

    老七,牛逼啊,这篇文章快照是8小时前的,一发表就被收录了,厉害!!向七哥学习!

发表评论

您的昵称 *

您的邮箱 *

您的网站

lao7-SEO-blog SEO SEM web-skills