随着搜索引擎大兴, 排列在前的网站引入大量流量. 无论是搜索页面的广告还是查出来的结果, 与搜索者的目标匹配度都比较高 (如果搜索引擎足够智能), 所以通过搜索引擎而来的访客很可能会从网站上得到他想要的东西, 并记住这个网站. 也就是说, 搜索引擎会带来很多有价值的流量, 所以花点时间针对搜索引擎优化一下 WordPress 博客也是值得的. 本文将为你分享一些 WordPress SEO 技巧.
以前我没有花太多时间做搜索引擎优化, 搜索引擎收录效果不是很好. 去年二月我终于为博客搞了一下 SEO, 写下这个文章. 一年半以来陆续进行了更多 SEO 优化, 博客文章写得不多了, 流量却有增无减, 网站也重回 PageRank 7, 效果相当不错的. 这次我根据自己的 WordPress SEO 方案更新了本文的内容.
我不是什么 SEO 高手, 但作为一个搞搜索的前端开发, 或多或少知道一点, 折腾一下算是自我陶醉, 高人请绕道前行.
目录
- 优化博客副标题
- 区分显示页面标题
- Keywords 和 Description
- 定义面包屑
- 使用 h1, h2, h3, strong 标签
- 将 Related Post 改为 More posts about XXX
- 在类目页面和标签页面的添加概要描述
- 与文章无关内容后移
- 消灭内嵌 CSS 和内嵌 JavaScript
- 为 Read more (阅读全文) 链接加上 nofollow
- 不要制作欢迎页面
- 优化文章列表页面
- 使用微格式和微数据
- 向 Google 提交 Sitemap
- 使用 WordPress 内建图库, 并增加图片展示页面
优化博客副标题
副标题 (slogan), WordPress 中称为 tagline. 它与博客标题不一样, 可能会承载一些描述博客的文字, 优化一下可以利用起来. 如我的副标题是 “mg12′s Blog – Just Another WordPress Blog”, 其中的 WordPress Blog 被我设置为 h1. 因为我想告诉爬虫, 这是一个关于 WordPress 的博客.
区分显示页面标题
页面的标题不要包含博客名称. WordPress 标题一般会用到 bloginfo(‘name’) 和 wp_title() 两部分, 前者是博客名称, 后者是文章标题 (如果标题不存在则不显示). 经典主题和默认主题输出标题用的代码如下.
<title><?php wp_title('«', true, 'right'); ?> <?php bloginfo('name'); ?></title>
输出的标题结构是 “文章标题 » 博客名称”.
除非你的标题和文章内容相关度比较高, 否则这样的标题对 SEO 显然是不好的. 标题是爬虫认为重要的内容之一, 如果标题中包含了与文章内容无关的信息, 多少会对该页面有所影响.
那应该怎么弄呢? 我们可以对不同类型的页面进行区分, 我的实现代码如下.
<title><?php
// 如果是首页和文章列表页面, 显示博客标题
if(is_front_page() || is_home()) {
bloginfo('name'); // 如果是文章详细页面和独立页面, 显示文章标题
} else if(is_single() || is_page()) {
wp_title(''); // 如果是类目页面, 显示类目表述
} else if(is_category()) {
printf('%1$s 类目的文章存档', single_cat_title('', false)); // 如果是搜索页面, 显示搜索表述
} else if(is_search()) {
printf('%1$s 的搜索结果', wp_specialchars($s, 1)); // 如果是标签页面, 显示标签表述
} else if(is_tag()) {
printf('%1$s 标签的文章存档', single_tag_title('', false)); // 如果是日期页面, 显示日期范围描述
} else if(is_date()) {
$title = '';
if(is_day()) {
$title = get_the_time('Y年n月j日');
} else if(is_year()) {
$title = get_the_time('Y年');
} else {
$title = get_the_time('Y年n月');
}
printf('%1$s的文章存档', $title); // 其他页面显示博客标题
} else {
bloginfo('name');
}
?></title>
Keywords 和 Description
Keywords 为搜索引擎提供网页包含的核心内容, Description 则为搜索引擎提供网页的描述信息. 我发布的主题曾经包括了对 keywords 和 description 的处理, 但因为一些 SEO 插件发生冲突, 在较新的版本中已经去除. 笔者认为 WordPress 的很多所谓 SEO 插件做得并不到位, 对中文博客支持都很差, 自己修改一下效果可能更好.
以下是我对 keywords, description 和页面标题的处理规则, 实现方法可以参考上一段关于页面标题的说明.
页面类型 | Keywords | Description | Title |
---|---|---|---|
首页 (front page) | 自定义 keywords | 自定义 description | 博客标题 |
文章列表页面 (index) | 自定义 keywords | 自定义 description | 博客标题 |
文章详细页面 (single) | 标签组合 | 摘要或者文章前 220 个字符 (截取文章需要特殊处理全角字符) |
文章标题 |
独立页面 (page) | 标签组合 | 文章前 220 个字符 (截取文章需要特殊处理全角字符. 独立页面不支持摘要, 有特殊需要可以创建页面模板) |
文章标题 |
类目存档页面 | 类目名称 | 类目描述 | XXX 类目的文章存档 |
搜索页面 | 搜索关键字 | XXX 的搜索结果 | XXX 的搜索结果 |
标签存档页面 | 标签名称 | 标签描述 | XXX 标签的文章存档 |
日期存档页面 | 日期 | XXX 的文章存档 | XXX 的文章存档 |
其他页面 | 留空 | 页面标题 | 博客标题 |
文章详细页面的描述一般取文章的前 220 个字符即可, 特别重要的页面和文章可以自定义摘要, 使其信息准确度更高. 如果存在摘要信息则使用摘要, 没有则使用前 220 个字符, 实现代码如下.
<?php
if($post->post_excerpt) {
$description = $post->post_excerpt;
} else {
// utf8_trim 方法是为了在截取字符之前对字符串进行转义, 避免出现截取半个汉字的情况
// 参考文档: http://php-utf8.61924.nl/documentation/functions/utf8_trim.html
$description = utf8_trim(substr(strip_tags($post->post_content), 0, 220));
}
?>
定义面包屑
面包屑在网站中起到导航的作用, 便于搜索引擎进行索引. 如果一个网站存在面包屑, 在 Google 中看到的是路径索引, 而不是文章链接, 如下图.
我介绍过两款 WordPress 面包屑插件, 分别是 Breadcrumb NavXT 和 Breadcrumbs.
使用 h1, h2, h3, strong 标签
- h1 给予文章标题或者与网站相关性高的推广性内容, 而不是博客标题. 比如: 文章详细页面的 h1 给文章标题, 因为相关度最高.
- h2 是跟文章有关的描述式信息, 如面包屑, 分类和标签.
- h3 是其他类似内容, 如相关文章, 小标题.
- strong 给文章内的关键字. 比如: 本文第一段将 strong 放在 “WordPress SEO 技巧” 这个词组上.
将 Related Post 改为 More posts about XXX
其中 XXX 是关键字及其链接, 本人建议使用分类或者标签链接代替. 从 SEO 优化的角度来说, 因为 Related 一词与几个文章的链接没有任何关系, 但标签与之相关度很高. (一般相关文章是通过相似标签来确定的.) 从用户体验的角度来说, 没有太多人留意你的 Tags 是什么, 不如将标签和相关文章结合现实. 阿里巴巴速卖通的产品详细页面也类似这样做的, 这是我 2009 年操刀搞上去的.
在类目页面和标签页面的添加概要描述
类目页面和标签页面都是用户呈现某写有相似内容的文章, 但是文章肯定有其独有的侧重点, 它们之间也存在一些差异. 在文章列表之前放一段关于某该分类的描述, 告诉爬虫这是一个归类为 XXX 的页面, XXX 指的是什么. 关键位置增加描述信息, 可以让该分类获得更好权值.
WordPress 的分类和标签都是可以添加描述信息的, 在分类页面和标签页面, 我建议在文章列表前先展示描述信息. 一些网站标签超过, 根本没有办法逐个填写, 那么可以套用固定的语句, 加上对应的标签作为其关键字.
与文章无关内容后移
很多爬虫都会爬取全页进行分析, 但还有些爬虫只会分析页面的前 N 个字节的内容. 无论是曝光次数还是分析次序, 显然前面内容的权重相对会比较高. 为了爬虫有效的收录, 应该尽量将无关内容后移. 如 JavaScript 等可以在 DOM ready 时再执行.
这个博客顶部的很多与内容无关的内容其实都是放在页脚的, 如搜索栏, 订阅按钮都是放到页脚, 在 DOM ready 时通过 CSS 或者 JavaScript 重新定位来实现的.
消灭内嵌 CSS 和内嵌 JavaScript
内嵌的 CSS 和 JavaScript 可能带有一些关键字和链接, 而且拖慢页面加载速度, 影响爬虫收录. 尽量将这些写在外部文件中.
避免出现重复内容的文章
WordPress 的评论分页可能导致多个重复内容的文章, 会将某些关键词的权重分散了, 有必要进行 SEO 优化.
关于 WordPress 评论的 SEO, 我已经在《对评论分页的 SEO》写过处理方法. 后来又在《WordPress 评论 SEO》中介绍了另一种处理方法, 该方法不需要借助插件.
为 Read more (阅读全文) 链接加上 nofollow
因为 Read more 链接的路径实际和文章标题相同, 没必要再多加一个文本与页面内容无关的链接. 再者, “Read more…” 在网站出现 N 多次, 可能会干扰爬虫. 后来我专门写了一个文章 Step-by-step 教你如何在 WordPress 进行修改, 请阅读《为 WordPress 的 Read more 加上 nofollow》.
不要制作欢迎页面
很多朋友喜欢把博客首页做成欢迎页面, 但因为大量链接链向首页, 它是最重要的页面, 应该尽量放置与博客相关的内容. 关于网站的首页, 我给两个建议.
- 直接使用文章列表页面作为首页, 如 NeoEase.com. 但对于更新频繁的博客不是太好, 页面因为没有固定的内容, 关键词的信息会波动很大, 建议上面写一段固定文字.
- 制作一个频繁更新内容的文章导航页面, 可以放置特色产品, 热门文章和最新评论等内容.
优化文章列表页面
经过我长期的试验, 切勿在文章列表页面展示所有文章内容. 如果你的文章直接相关度都很高 (比如: 全站都是写 SEO 相关的文章), 建议展现所有文章的摘要. 如果文章之间相关度不高 (比如: 像这个博客一样, 有时写 SEO, 有时写 WordPress, 有时写前端, 有时又招聘), 那么只展示前三个文章的摘要即可.
如果部分文章只显示标题, 可以动态加载文章以方便用户. 详细请参考《WordPress 动态加载文章内容》.
使用微格式和微数据
微格式和微数据都是为了语义化网页结构, 在网页上标记内容以描述特定类型的信息, 如评论, 事件, 商品等. 不用的是微格式使用 class 来语义化标签, 而微数据则是使用特定的标签. 两种方式 Google 都支持, 而微数据的适用范围更广, 使用方便, 更多内容请参考 Google 网站站长工具的文档 和 schema.org 上的例子.
示例 1: 在文章上加上评分功能, 并使用微数据 AggregateRating.
在 Google 的搜索结果中可以看到文章的评分结果. 虽说这个不会影响文章排名, 但有着这么抢眼的黄色星星和评价信息, 其实是鼓励用户点击进入.
示例 2: 使用微格式或者微数据对博客的评论进行处理.
当文章内出现新的评论时, 搜索引擎会认为页面有所更新, 微格式和微数据可以令爬虫评论内容和时间更加敏感, 避免页面被认为是死页面.
进行微数据和微格式处理的页面可以使用网页摘要测试工具来进行优化后的审查, 以确保处理无误.
向 Google 提交 Sitemap
WordPress 有很多自动生成 sitemap 的插件, Google XML Sitemaps 是我用过最好的一个, 按插件说明使用即可生成 sitemap 文件. 然后登录 Google Webmaster Tools, 并向 Google 提交网站的 sitemap XML 文件.
使用 WordPress 内建图库, 并增加图片展示页面
如果网站上的内容涉及视觉感官的内容, 比如: 地图, 产品和 Logo 设计, 建议使用 WordPress 的 Media 功能建立图库, 而不是库床. WordPress 2.5 之后的主题支持 image.php, 可以内建图片类型页面, 只要稍作优化, 可能为你的网站带来极大流量和更好的转化率.
我写了一篇关于选择 WordPress 内建图库和图床的文章, 可以参考一下.
总结
以上几点仅为个人意见, 具体效果可以参考本博客, 如发现问题或有好的建议请务必提出.
另外, 有些内容我没有提供具体的代码, 只是说了自己的想法或者做法. 如果你对其中某项有兴趣, 请在留言说明, 需求大的我会另起文章具体说明.