大家不知有没有看过 我爱水煮鱼 我是如何 SEO WordPress 的 2:Description 和 Keywords。挺不错的,建议大家放弃All in one SEO之类的插件,改用这段代码就行了。
通过下面的代码设置博客的Description 和 Keywords,用日志的摘要作为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('«', 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,','); ?>" />





终于发布了~
我可以发行第二版吗 :lol:
[回复]
支持的。呵呵。
[回复]
除了首页、文章页,另外最好支持“单页面”. :lol:
[回复]
“单页面”,这个是指什么意思??
[回复]
就是“关于”、“留言板”类的页面 :lol:
[回复]
这种页面不好统一~~首先关键词就没办法.另外像"留言板",如果没内容的话,描述从哪来?也没办法...不过,具体到单个博客订作的话那是可以的....
[回复]
原来是这样啊~ :lol:
[回复]
根据你的需要,我补充了最后一段。你可以看着修改~~ :lol:
:qiang:
[回复]
你好,请问出现乱码的情况怎么修改到UTF-8。。。谢谢啊
[回复]
对于中文是有可能会乱码~~我再更新一下~~~
[回复]
谢谢啊
[回复]
已经更新了,看最终版~~~还没测试。应该不会有问题的 :lol:
[回复]
谢谢了,没问题了 呵呵
[回复]
:qiang:
使用最终版的代码?
[回复]
你好,我用了最后那个最终解决方案都还是不行,只要这里面:
if (is_home()){
$description = "首页的描述";
$keywords = "首页的关键词";
} elseif (is_single()){
有中文,在查看源文件里面的中文全部是乱码,但只要“description” 和 “keywords"是英文查看源文件里面的中文就不会出现乱码了。
能不能帮我看一下,谢了。
[回复]
这个是字体编码问题而已,你把文件另存为UTF8的就行了
[回复]
我把主题里面的文件用Dreamweaver页面设置里转为UTF-8都还是一样,这个问题困扰我很久了,都还没搞掂~~
[回复]
就这个自定义的会乱码,内容不得页面又不会。
if (is_home()){
$description = “首页的描述”;
$keywords = “首页的关键词”;
} elseif (is_single()){
[回复]
你是不是把这段代码存在另一个文件,另一个文件也是要存为utf8的啊。统统都utf8就没错的了。
[回复]
是mzfeng.com这个么?没有乱码啊?? 你给个有乱码的链接我看看
[回复]
呵呵,刚刚弄好了,确实是utf-8编码的问题。
问题主要出在我一直用WinSCP软件的编辑器来改写原代码的。可能这个软件对UTF-8编码不好,用Dreamweaver修改就没问题了,感谢Lc.博主!
[回复]
你好,我用了您的这个代码,但分类目录下面没有关键字和描述了呢?请问应该如何设置成我想要的关键字和描述呢,谢谢
[回复]
分类目录的确是没有。这个我也不知道呢~~ 找不到有好的办法。
[回复]
你好,我用 (最终:解决乱码问题)这一个的,网站打不开了,显示以下错误:
Parse error: syntax error, unexpected '<' in /data/home/zs8985/htdocs/wp-content/themes/hw/header.php on line 39
我用第一个修改版1 网站就可以打开,但有的文章出现乱码。
[回复]
要看line 39是什么的啊. 应该是你复制过去之后有点小地方错误了. 你看着改改就是了~
其它人复制直接用都是没问题的.
[回复]
elseif (is_page()) {
if($page_id == '2'){ ##根据需要修改这里的数字
$description = "关于网站";
$keywords = "关于网站";
}
这段代码添加失败 添加后提示 错误
[回复]
这段嘛.. 的确是.. 最好不用用这段~~
如果是开了固定链接的话就没办法用这段了~
我当时没考虑到这个~~
是给只是用原始链接的博客用的. 失策了~~
[回复]
能否为分类页也添加说明与关键字?
[回复]
没认真研究过~~
[回复]
我是认真研究过了,就是研究不出来 /疑问
只好求助来了
[回复]
有空儿研究一下~~ /可爱
[回复]
那我就经常来关注了 /ok
[回复]
哈哈..已经研究出来.. 有空儿发布 /可爱
[回复]
别有空了,邮箱发给我先尝尝鲜吧 /呲牙
[回复]
其实我现在也有空... 不过要先去吃个饭..吃完回来发布. /呲牙
我正好出门,晚上回家正好看到 /呲牙
你如果晚上发,我就能强占沙发
[回复]
其实我这里没啥人气的~~ 你啥时来都可以抢到沙发的了~`
不过现在有点事~~ 迟些再发~~ /呲牙
[回复]
感谢博主,这个问题困扰我了几天,今天才想到源码乱码可能是自动截取description导致的,一搜果然找到了解决方法
[回复]
http://www.mobai.org/2010/02/23/btalk/
求助,还是乱码!~
chenglu#yeah.net
[回复]
看了,没看到乱码~
[回复]
谢谢您的回复,我换了个主题,就好了~
汗,谢谢~
自从用了那个主题之后谷歌都不收录我的网站了,我给换回来了,嘿嘿
[回复]