Categorized | WordPress, 每周精选

分享SEO WordPress的Description 与 Keywords

Posted on 30 八月 2009 by 柳城 ,阅读 497 简洁版 繁體


大家不知有没有看过 我爱水煮鱼 我是如何 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,','); ?>" />

延伸阅读:

  1. SEO WordPress的Description、Keywords和Title(完整版)
  2. 赶紧了,抛弃 All in One SEO
  3. 分享SEO WordPress的标题Title

转载请注明 : 来源于 分享SEO WordPress的Description 与 Keywords | 柳城博客

相关主题

43条评论 于 “分享SEO WordPress的Description 与 Keywords”

  1. blinux Says:

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

    [回复]

    Lc. 回复:

    支持的。呵呵。

    [回复]

    blinux 回复:

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

    [回复]

    Lc. 回复:

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

    [回复]

    blinux 回复:

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

    [回复]

    Lc. 回复:

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

    [回复]

    blinux 回复:

    原来是这样啊~ :lol:

    [回复]

    Lc. 回复:

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

  2. blinux Says:

    :qiang:

    [回复]

  3. 海梦缘 Says:

    你好,请问出现乱码的情况怎么修改到UTF-8。。。谢谢啊

    [回复]

    Lc. 回复:

    对于中文是有可能会乱码~~我再更新一下~~~

    [回复]

  4. 海梦缘 Says:

    谢谢啊

    [回复]

    Lc. 回复:

    已经更新了,看最终版~~~还没测试。应该不会有问题的 :lol:

    [回复]

  5. 海梦缘 Says:

    谢谢了,没问题了 呵呵

    [回复]

  6. ③秋之流☆ Says:

    :qiang:
    使用最终版的代码?

    [回复]

  7. 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.博主!

    [回复]

  8. WEI Says:

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

    [回复]

    Lc. 回复:

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

    [回复]

  9. 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是什么的啊. 应该是你复制过去之后有点小地方错误了. 你看着改改就是了~
    其它人复制直接用都是没问题的.

    [回复]

  10. 天晴轩 Says:

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

    [回复]

    Lc. 回复:

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

    [回复]

  11. 盒子 Says:

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

    [回复]

    Lc. 回复:

    没认真研究过~~

    [回复]

    盒子 回复:

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

    只好求助来了

    [回复]

    Lc. 回复:

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

    [回复]

    盒子 回复:

    那我就经常来关注了 /ok

    [回复]

    Lc. 回复:

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

    [回复]

    盒子 回复:

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

    [回复]

    Lc. 回复:

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

  12. 盒子 Says:

    我正好出门,晚上回家正好看到 /呲牙

    你如果晚上发,我就能强占沙发

    [回复]

    Lc. 回复:

    其实我这里没啥人气的~~ 你啥时来都可以抢到沙发的了~`
    不过现在有点事~~ 迟些再发~~ /呲牙

    [回复]

  13. zxdker Says:

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

    [回复]

  14. 墨白 Says:

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

    [回复]

    柳城 回复:

    看了,没看到乱码~

    [回复]

    墨白 回复:

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

    [回复]

1 Trackbacks For This Post

  1. SEO WordPress的Description、Keywords和Title | 森羅萬象 Says:

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

Leave a Reply

[强] [握手] [可爱] [ok] [呲牙] :) [偷笑] [流泪] [疑问] [亲亲] [擦汗] [得意] [衰] [可怜] [抱拳] [大兵] more »

Advertise Here

最新评论

Lc.live