分享SEO WordPress的Description 与 Keywords

大家不知有没有看过 我爱水煮鱼 我是如何 SEO WordPress 的 2:Description 和 Keywords。挺不错的,建议大家放弃All in one SEO之类的插件,改用这段代码就行了。

通过下面的代码设置博客的DescriptionKeywords,用日志的摘要作为Description,或是文章的前220个字,用标签(tags)作为关键词Keywords

只需要把这段代码放在header.php就行了。

我爱水煮鱼 里的原代码:

<?if (is_home()){    
 $description = "首页的描述";    
 $keywords = "首页的关键词";
} elseif (is_single()){    
 if ($post->post_excerpt) {        
  $description  = $post->post_excerpt;    
 } else {       
  $description = substr(strip_tags($post->post_content),0,220);    
 }      
 $keywords = "";           
 $tags = wp_get_post_tags($post->ID);    
 foreach ($tags as $tag ) {        
  $keywords = $keywords . $tag->name . ", ";    
  }
}
?>
<meta name="keywords" content="<?=$keywords?>" />
<meta name="description" content="<?=$description?>" />

修改版1:

上面的代码已经可以直接拿来用。不过也有一些细节问题,你可以用下面的修改版。主要是去掉了关键词之间的空格和最后的逗号,顺便也去掉了描述(description)的换行符(\n)。

<?php
 if (is_home()){   
 $description = "首页的描述";    
 $keywords = "首页的关键词";
} elseif (is_single()){   
 if ($post->post_excerpt) {       
  $description  = $post->post_excerpt;    
 } else {       
  $description = substr(strip_tags($post->post_content),0,220);   
 }      
 $keywords = "";           
 $tags = wp_get_post_tags($post->ID);    
 foreach ($tags as $tag ) {       
  $keywords = $keywords . $tag->name . ",";    
  }
}
?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />

修改版2:

下面还有一段代码,主要是应Blinux的要求,呵。他需要把日志的第一段作为Description,就是不要再从第二行取字符了。Blinux是一个完美主义者,所以在他的要求下,也经过测试,下面的代码近乎完美地解决了这个问题。


<?php
 if (is_home()){
    $description = "首页的描述";
    $keywords = "首页的关键词";
} elseif (is_single()){
    if ($post->post_excerpt) {
        $description  = $post->post_excerpt;
    } else {
   if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
    $post_content = $result['1'];
   } else {
    $post_content_r = explode("\n",trim(strip_tags($post->post_content)));
    $post_content = $post_content_r['0'];
   }
         $description = substr($post_content,0,220);   
  }
 
    $keywords = "";      
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
        $keywords = $keywords . $tag->name . ",";
    }

}

?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />

主要解释一下中间这段:


###第一种情况,以<p>开始,</p>结束来取第一段
if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){ 
    $post_content = $result['1'];
} else {
###第二种情况,以换行符(\n)来取第一段   
   $post_content_r = explode("\n",trim(strip_tags($post->post_content))); 
    $post_content = $post_content_r['0'];
} 

分两种情况的原因是:第一种情况对Windows Live Writer发布的文章有效。第二种情况适合直接用WP的后台发布的文章。

代码放在header.php

你可以考虑放在title标签的之前或之后,不过我习惯的作法是把上面的代码单独另存为一个文件,如命名为desc.php,上传到你目前所用主题的目录下,然后调用就行了。


<title><?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>
<?php include_once("desc.php"); ?>   

补充:对于页面(Page)的Description 与 Keywords

关于Page页面与分类页的的描述和关键词, 请关注最新文章~~(2009-11-07更新)

最终:解决乱码问题

这是因为substr在截取中文字符时所造成的。所以要自定义一个函数

<?php
if (!function_exists('utf8Substr')) {
 function utf8Substr($str, $from, $len)
 {
     return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
          '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
          '$1',$str);
 }
}
 if (is_home()){
    $description = "首页的描述";
    $keywords = "首页的关键词";
} elseif (is_single()){
    if ($post->post_excerpt) {
        $description  = $post->post_excerpt;
    } else {
   if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){
    $post_content = $result['1'];
   } else {
    $post_content_r = explode("\n",trim(strip_tags($post->post_content)));
    $post_content = $post_content_r['0'];
   }
         $description = utf8Substr($post_content,0,220);   
  }
 
    $keywords = "";      
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
        $keywords = $keywords . $tag->name . ",";
    }

}

?>
<meta name="description" content="<?php echo trim($description); ?>" />
<meta name="keywords" content="<?php echo rtrim($keywords,','); ?>" />
69 回复
  1. blinux says:

    终于发布了~
    我可以发行第二版吗 :lol:

    Lc. 回复:

    支持的。呵呵。

    blinux 回复:

    除了首页、文章页,另外最好支持“单页面”. :lol:

    Lc. 回复:

    “单页面”,这个是指什么意思??

    blinux 回复:

    就是“关于”、“留言板”类的页面 :lol:

    Lc. 回复:

    这种页面不好统一~~首先关键词就没办法.另外像”留言板”,如果没内容的话,描述从哪来?也没办法…不过,具体到单个博客订作的话那是可以的….

    blinux 回复:

    原来是这样啊~ :lol:

    Lc. 回复:

    根据你的需要,我补充了最后一段。你可以看着修改~~ :lol:

  2. mzfeng says:

    你好,我用了最后那个最终解决方案都还是不行,只要这里面:
    if (is_home()){
    $description = “首页的描述”;
    $keywords = “首页的关键词”;
    } elseif (is_single()){
    有中文,在查看源文件里面的中文全部是乱码,但只要“description” 和 “keywords”是英文查看源文件里面的中文就不会出现乱码了。
    能不能帮我看一下,谢了。

    Lc. 回复:

    这个是字体编码问题而已,你把文件另存为UTF8的就行了

    mzfeng 回复:

    我把主题里面的文件用Dreamweaver页面设置里转为UTF-8都还是一样,这个问题困扰我很久了,都还没搞掂~~

    mzfeng 回复:

    就这个自定义的会乱码,内容不得页面又不会。
    if (is_home()){
    $description = “首页的描述”;
    $keywords = “首页的关键词”;
    } elseif (is_single()){

    Lc. 回复:

    你是不是把这段代码存在另一个文件,另一个文件也是要存为utf8的啊。统统都utf8就没错的了。

    Lc. 回复:

    是mzfeng.com这个么?没有乱码啊?? 你给个有乱码的链接我看看

    mzfeng 回复:

    呵呵,刚刚弄好了,确实是utf-8编码的问题。
    问题主要出在我一直用WinSCP软件的编辑器来改写原代码的。可能这个软件对UTF-8编码不好,用Dreamweaver修改就没问题了,感谢Lc.博主!

  3. WEI says:

    你好,我用了您的这个代码,但分类目录下面没有关键字和描述了呢?请问应该如何设置成我想要的关键字和描述呢,谢谢

    Lc. 回复:

    分类目录的确是没有。这个我也不知道呢~~ 找不到有好的办法。

  4. WEI says:

    你好,我用 (最终:解决乱码问题)这一个的,网站打不开了,显示以下错误:

    Parse error: syntax error, unexpected ‘<' in /data/home/zs8985/htdocs/wp-content/themes/hw/header.php on line 39

    我用第一个修改版1 网站就可以打开,但有的文章出现乱码。

    Lc. 回复:

    要看line 39是什么的啊. 应该是你复制过去之后有点小地方错误了. 你看着改改就是了~
    其它人复制直接用都是没问题的.

  5. 天晴轩 says:

    elseif (is_page()) {
    if($page_id == ‘2’){ ##根据需要修改这里的数字
    $description = “关于网站”;
    $keywords = “关于网站”;
    }
    这段代码添加失败 添加后提示 错误

    Lc. 回复:

    这段嘛.. 的确是.. 最好不用用这段~~
    如果是开了固定链接的话就没办法用这段了~
    我当时没考虑到这个~~
    是给只是用原始链接的博客用的. 失策了~~ :)

  6. 盒子 says:

    能否为分类页也添加说明与关键字?

    Lc. 回复:

    没认真研究过~~

    盒子 回复:

    我是认真研究过了,就是研究不出来 /疑问

    只好求助来了

    Lc. 回复:

    有空儿研究一下~~ /可爱

    盒子 回复:

    那我就经常来关注了 /ok

    Lc. 回复:

    哈哈..已经研究出来.. 有空儿发布 /可爱

    盒子 回复:

    别有空了,邮箱发给我先尝尝鲜吧 /呲牙

    Lc. 回复:

    其实我现在也有空… 不过要先去吃个饭..吃完回来发布. /呲牙

  7. zxdker says:

    感谢博主,这个问题困扰我了几天,今天才想到源码乱码可能是自动截取description导致的,一搜果然找到了解决方法 [强]

  8. 墨白 says:

    http://www.mobai.org/2010/02/23/btalk/
    求助,还是乱码!~
    chenglu#yeah.net

    柳城 回复:

    看了,没看到乱码~

    墨白 回复:

    谢谢您的回复,我换了个主题,就好了~
    汗,谢谢~
    自从用了那个主题之后谷歌都不收录我的网站了,我给换回来了,嘿嘿
    :) [呲牙]

    闲人 回复:

    经过反复测试,发现这种方法有一个弊病,那就是“用日志的摘要作为Description,或是文章的前220个字,”这个里边不能有超链接或者其他类似的字符,否则就会出错,希望能解决下。谢谢了

  9. yospan says:

    柳兄 [偷笑] [偷笑] .我从你这里偷学很多东西哦.谢谢分享.!~
    请教一下,原来ALL IN ONE的NOINDEX,百度是不是对这个很敏感啊.它老是转首页,内页就不进去了.是否去掉这个插件,然后添加上面的代码文件,会好些呢.!~

  10. 闲人 says:

    我使用了第二种,不过貌似没有能完美解决乱码的问题和出错的问题。
    譬如,xianren.org/fnetjishu/xpwojieweb.html就出现了出错的问题,
    xianren.org/fzantan/frontoftheclass.html就出现了乱码的问题,大多数正常,我测试了下,有20%左右会出现问题。麻烦解决下?

    闲人 回复:

    经过反复测试,发现这种方法有一个弊病,那就是“用日志的摘要作为Description,或是文章的前220个字,”这个里边不能有超链接或者其他类似的字符,否则就会出错,希望能解决下。

    柳城 回复:

    这不是最新版本了。这是旧的了。~~ 其实应该出一个更新的了。 :)
    都旧了

  11. 边看边走 says:

    柳老大,请教一下,这个我用了,没问题,就是有个疑问,能不能写段代码,让他截取文章中间部分的内容,或者只截取中文,如果在页面顶部放了广告代码,他会截取广告代码加一些文章内容,这样很不好啊,不知道这个能不能实现。一般广告都是首尾有,中间比较少,所以这个应该考虑一下啊

    柳城 回复:

    有空更新一下

  12. frank says:

    我网站description标签的乱码问题很长时间,我把下面的代码加入了header.php

    post_excerpt) {
    $description = $post->post_excerpt;
    } else {
    if(preg_match(‘/(.*)/iU’,trim(strip_tags($post->post_content,””)),$result)){
    $post_content = $result[‘1’];
    } else {
    $post_content_r = explode(“\n”,trim(strip_tags($post->post_content)));
    $post_content = $post_content_r[‘0′];
    }
    $description = utf8Substr($post_content,0,220);
    }

    $keywords = “”;
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
    $keywords = $keywords . $tag->name . “,”;
    }

    }

    ?>
    <meta name="description" content="” />
    <meta name="keywords" content="” />

    加完后,查看页面源代码,发现出现了两个description和keywords,于是我删除了header.php中原有的下列代码,

    <?php if((is_home() && ($paged < 2 )) || is_single() || is_page()) { echo '’; } else { echo ”; } ?>

    <meta name="description" content="” />

    <meta name="description" content="” />

    <meta name="keywords" content="” />

    目前看,博客工作正常。是否稳定或有其他问题等待进一步观察。

  13. Rik says:

    你好博主,如果我不想使用摘要作为description标签,而只取用截断文章前220字的方式;那么我要去掉那些代码?

  14. gemini says:

    你好,这个调用后,网站首页最上方会出现一行空白,什么原因??新人求解,谢谢大侠! [可爱]

引用通告 & 通告

  1. […] WordPress的Description、Keywords和Title(完整版)∷柳城 分享SEO WordPress的Description 与 Keywords∷柳城 分享SEO WordPress的标题Title∷柳城 WordPress […]

  2. […] 分享SEO WordPress的Description 与 Keywords( http://liucheng.name/930/ ) […]

  3. […] 分享SEO WordPress的Description 与 Keywords( http://liucheng.name/930/ ) […]

评论已关闭。