隨著搜索引擎大興, 排列在前的網站引入大量流量. 無論是搜索頁面的廣告還是查出來的結果, 與搜索者的目標匹配度都比較高 (如果搜索引擎足夠智能), 所以通過搜索引擎而來的訪客很可能會從網站上得到他想要的東西, 並記住這個網站. 也就是說, 搜索引擎會帶來很多有價值的流量, 所以花點時間針對搜索引擎優化一下 WordPress 博客也是值得的. 本文將為你分享一些 WordPress SEO 技巧.
以前我沒有花太多時間做搜索引擎優化, 搜索引擎收錄效果不是很好. 去年二月我終於為博客搞了一下 SEO, 寫下這個文章. 一年半以來陸續進行了更多 SEO 優化, 博客文章寫得不多了, 流量卻有增無減, 網站也重回 PageRank 7, 效果相當不錯的. 這次我根據自己的 WordPress SEO 方案更新了本文的內容.
優化博客副標題
副標題 (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 和頁面標題的處理規則, 實現方法可以參考上一段關於頁面標題的說明.
文章詳細頁面的描述一般取文章的前 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)); } ?>