一提到Wordpress的优化问题,大家都不可不提到标题关键字和描述的优化,虽然现在搜索引擎已经表示meta关键字和meta描述不再像以前那么重要了。但我们还是相信它们在搜索引擎排名的重要性。曾经一度盛传的一个插件 All in one SEO pack就可以完成这些SEO优化,但是对于这个插件有部分博主表明对百度的搜索引擎不是很友好而且占资源,其实我们可以换个角度,我们可以利用这个插件的原理,自己用代码实现SEO优化,这样子既可以减少更多的插件的使用,为我们的Wordoress减肥;又可以达到我们的优化目的。好了,一起看看代码,将以下代码添加到主题的head标签内替换掉原主题的相关内容即可:
<?php if (is_home()){ $keywords = "觉唯,前端开发,前端设计,网页设计,创意,HTML,CSS,javascript"; $description = "觉唯前端,专注web前端开发和用户体验设计,享受其带来的乐趣 - http://www.jiawin.com"; } elseif (is_single()){ if ($post->post_excerpt) { $description = $post->post_excerpt; } else { $str = csubstr(strip_tags($post->post_content),0,220); $str = trim($str); $str = strip_tags($str,""); $str = ereg_replace("\t","",$str); $str = ereg_replace("\r\n","",$str); $str = ereg_replace("\r","",$str); $str = ereg_replace("\n","",$str); $str = ereg_replace(" "," ",$str); $description = trim($str); } $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?>" /> <title><?php global $page, $paged; wp_title( '|', true, 'right' ); bloginfo( 'name' ); $site_description = get_bloginfo( 'description', 'display' ); if ( $site_description && ( is_home() || is_front_page() ) ) echo " | $site_description"; if ( $paged >= 2 || $page >= 2 ) echo ' | ' . sprintf( __( 'Page %s' ), max( $paged, $page ) ); ?></title>
注:截取文章内容为description时将自动删除所有空格和换行
添加完后在前台刷刷看看效果吧,是不是已经出来了。嘿嘿……先别开心哦,需要实现meta部分的完美优化,还得一个步骤哦。我们细心点看看meta描述这一部分,可以多看几篇文章,就发现其中的一个问题:当编码为UTF-8的时候,description
的截取内容末尾处有时候会变成乱码。这是为什么呢?因为description
在截取文章内容的时候,是按照字符(例子默认设置为220)来计算的,我们都知道Wordpress模板的字符集是UTF-8,它对于英文来说是一个字母一个字节(8位)来编码,而中文却是一个汉字三个字节(24位)来编码。所以截断的函数只会判断在多少字节的地方去截,如果到了那个地方一个汉字只显示了三分之一或者三分之二的时候,那个汉字就不能完整显示,而函数又不能很智能的多截一个字节或者少截一个,怎么办?于是就产生了乱码。所以,我们需要对替换截断的函数作相对应的处理。
在主题的模板函数(functions.php)中添加:
// 解决utf8截取乱码问题 function csubstr($string, $beginIndex, $length){ if(strlen($string) < $length){ return substr($string, $beginIndex); } $char = ord($string[$beginIndex + $length - 1]); if($char >= 224 && $char <= 239){ $str = substr($string, $beginIndex, $length - 1); return $str; } $char = ord($string[$beginIndex + $length - 2]); if($char >= 224 && $char <= 239){ $str = substr($string, $beginIndex, $length - 2); return $str; } return substr($string, $beginIndex, $length); }
到这里已经完美解决,本文所用的方法是从网上收集整理出来的,希望对各位有用。本人入门尚浅,如有不正确之处,望请高手纠正,欢迎(轻点)拍砖。
不错,可以尝试下。我的乱七八糟的
学习了,非常不错!!
目前在用All in one SEO pack,以后提速卸插件再纯代码优化,有用,mark 这年头meta是必须的
为什么我加了之后,文章页面还是首页的网站名称啊,没有像博主一样实现:文章名-网站名称。
我的只有网站名称
我的加了会出现如下错误:
Fatal error: Call to undefined …… header.php on line 13
检查下是否有在主题的模板函数(functions.php)中添加最后一段代码。
最后一段代码?
话说3.4版本的wp的excerpt函数已经完美支持中文了….
好好学习了
原来这样子啊,怪不得我一直解决不了那个乱码的问题,现在终于解决了,非常感谢博主
呵呵,解决了就好