隨著搜尋引擎大興, 排列在前的網站引入大量流量. 無論是搜尋網頁面的廣告還是查出來的結果, 與搜尋者的目標匹配度都比較高 (如果搜尋引擎足夠智能), 所以通過搜尋引擎而來的訪客很可能會從網站上得到他想要的東西, 並記住這個網站. 也就是說, 搜尋引擎會帶來很多有價值的流量, 所以花點時間針對搜尋引擎最佳化一下 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)); }?>