對搜索引擎隱藏特定的文章
這個問題的來源是這樣的:
眾所周知,隨著搜索引擎的改良,會越來越排斥采集和偽原創,尤其是百度還推出了起源算法,對采集站進行K站等措施。如果被貼上采集站的標簽,所有的努力可能付諸東流。
相信很多站長,也想多一些原創內容,並不想全部靠采集別人的文章。然而一個新站,尤其是個人站長,其內容的充實速度一定很慢,我們做站不僅要討好搜索引擎,更要討好讀者。如果讀者不能在你的站內得到比較充實豐富的信息,那體驗肯定不好。其實各大名站老站,一樣有相當比例的采集或改編內容,這符合互聯網的共享精神。各大電視台和報紙也大部分是轉載和文摘,只要摘得好符合了特定需求的內容需要,就是有價值的。
關鍵在於:不要用采集的文章來為自己的網站騙取搜索流量。這應該是符合互聯網道德規范和共識的。如果只讓原創的內容參與搜索引擎的游戲規則,而非原創部分屏蔽搜索引擎。這樣就能平稱地滿足搜索引擎、網站主、用戶三者的利益。
於是問題歸結於一點:如何有效地、可靠地讓“部分文章屏蔽搜索引擎”?
我不知道這是不是一個比較共性的問題,如果一個網站,既希望通過豐富的文章來滿足受眾,但又怕被搜索引擎判斷為采集站,那這個就是一個真真切切要面對的、關鍵的、核心的、關系到網站生存發展的大問題。
最近也一直在學習相關方面的知識,以個人淺見,屏蔽搜索引擎有幾類方式:
一、用robots.txt
二、WP的站可以判斷用戶特征(看了你這篇博文後想到的)
三、通過JS封裝鏈接
四、通過重定向,比如短鏈接、PHP後台重定向等
對比以上幾種方式,
第一種方法:robots.txt好比在門上貼了封條:“嘿,蛛蛛,我這兒有些內容是不讓你檢索的”。這是所謂君子協定,搜索引擎一定有能力去看你貼著封條門內的東西,只是它不收錄罷了。為了判斷一個站是否有大量的采集內容,蛛蛛或許會有窺探的動機。
這種方法技術實現的成本最低,也應該能滿足大多數情況。好象百度在這方面的操守還是可以放心的,比如不索引淘寶的內容,而且也很痛恨360對百度內容的索引。
這個方法進一步的問題是:
在WP建的站中,如何可以高效率地讓“部分文章屏蔽搜索引擎”?
1、文章標題加特征:比如每篇文章的標題中加一個特殊字符,這個方法可行嗎,robots.txt用disallow:*特殊字條*就可以嗎?
2、文章的標簽識別:這個在操作層面好象是最最方便的,可是標簽似乎是動態的標記,無法在robotx.txt中篩選?
3、文章放進特定的目錄:這個robots.txt比較好寫的,然而在WP文章內容管理時如何簡易地操作?
第二種方法:好比是查看進門者的身份證,如果訪問者是搜索引擎,那麼就禁止通行。這種方法是對WP專用的,然後它的好處是可以非常詳細地區別對待,比如百度對采集的態度比較緊,而GOOGLE不太一樣,那有些文章就可以對百度關門而對谷歌開門。另外一個比較大的優點是,可以把判斷集成在WP環境中,比如通過插件或主題讓操作自動化。
第三種方法:好比是在門上換了一個門牌,搜索引擎只知道機械地去跟蹤門牌上的號碼,而浏覽器卻通過JS把門牌指向到另一個正確的入口了。然而:搜索引擎對JS的分析能力可能越來越強了,而且從谷歌的某些聲明中來看,搜索引擎也不太喜歡你的內容對人和搜索引擎不一樣。
這個方法大量地用在淘寶客鏈接的隱藏方面,這個方法的有效期估計不太長,而且操作比較麻煩,比較適合靜態的單獨頁面,不太適合WP這樣的數據庫組織文章的架構。
第四種方法:好比是給門牌號加了密,只有你敲門(點擊)了,才給你換成正確的門牌號。一般的訪問者一定會點擊,而搜索引擎不會模擬點擊這個動作。
這種方法相對徹底和“安全”,缺點是:
1、和第三方法一樣操作有些復雜,適合靜態的單獨頁面,或頁面中局部的鏈接,不太適合WP的環境。
2、過多的重定向,應該會消耗服務器的運算資源,積少成多,如果大量的文章都要進行一次重定向,服務器可能會不堪重負。
實現代碼
具體怎麼實現WordPress 對搜索引擎隱藏特定的文章呢?廢話不多說,直接上PHP代碼,放到當前主題的functions.php中即可使用(用UTF-8編碼另存為):
// 需要說明的是,如果你的WordPress站點開啟了頁面緩存,此功能無效 function ludouse_add_custom_box() { if (function_exists('add_meta_box')) { add_meta_box('ludou_allow_se', '搜索引擎', 'ludou_allow_se', 'post', 'side', 'low'); add_meta_box('ludou_allow_se', '搜索引擎', 'ludou_allow_se', 'page', 'side', 'low'); } } add_action('add_meta_boxes', 'ludouse_add_custom_box'); function ludou_allow_se() { global $post; //添加驗證字段 wp_nonce_field('ludou_allow_se', 'ludou_allow_se_nonce'); $meta_value = get_post_meta($post->ID, 'ludou_allow_se', true); if($meta_value) echo '<input name="ludou-allow-se" type="checkbox" checked="checked" value="1" /> 屏蔽搜索引擎'; else echo '<input name="ludou-allow-se" type="checkbox" value="1" /> 屏蔽搜索引擎'; } // 保存選項設置 function ludouse_save_postdata($post_id) { // 驗證 if ( !isset( $_POST['ludou_allow_se_nonce'])) return $post_id; $nonce = $_POST['ludou_allow_se_nonce']; // 驗證字段是否合法 if (!wp_verify_nonce( $nonce, 'ludou_allow_se')) return $post_id; // 判斷是否自動保存 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; // 驗證用戶權限 if ('page' == $_POST['post_type']) { if ( !current_user_can('edit_page', $post_id)) return $post_id; } else { if (!current_user_can('edit_post', $post_id)) return $post_id; } // 更新設置 if(!empty($_POST['ludou-allow-se'])) update_post_meta($post_id, 'ludou_allow_se', '1'); else update_post_meta($post_id, 'ludou_allow_se', '0'); } add_action('save_post', 'ludouse_save_postdata'); // 對於設置不允許抓取文章和頁面 // 禁止搜索引擎抓取,返回404 function do_ludou_allow_se() { // 本功能只對文章和頁面有效 if(is_singular()) { global $post; $is_robots = 0; $ludou_allow_se = get_post_meta($post->ID, 'ludou_allow_se', true); if(!empty($ludou_allow_se)) { // 下面是爬蟲Agent判斷關鍵字數組 // 有點簡單,自己優化一下吧 $bots = array( 'spider', 'bot', 'crawl', 'Slurp', 'yahoo-blogs', 'Yandex', 'Yeti', 'blogsearch', 'ia_archive', 'Google', 'baidu' ); $useragent = $_SERVER['HTTP_USER_AGENT']; if(!empty($useragent)) { foreach ($bots as $lookfor) { if (stristr($useragent, $lookfor) !== false) { $is_robots = 1; break; } } } // 如果當前文章/頁面禁止搜索引擎抓取,返回404 // 當然你可以改成403 if($is_robots) { status_header(404); exit; } } } } add_action('wp', 'do_ludou_allow_se');
使用方法
成功添加以上代碼到當前主題的functions.php後,我們就可以正常使用了,完全傻瓜式。在WordPress後台文章和頁面的編輯頁面,右邊欄底部我們可以看到這樣的選框:
如果當前文章/頁面需要禁止搜索引擎抓取,勾選即可。勾選後,當此文章/頁面被搜索引擎訪問時就會返回404狀態,無任何內容。如果你不喜歡給搜索引擎返回404,擔心死鏈太多影響SEO,可以將代碼中的:
status_header(404); exit;
改成:
echo "<meta name=\"robots\" content=\"noindex,noarchive\" />\n";
再將:
add_action('wp', 'do_ludou_allow_se');
改成:
add_action('wp_head', 'do_ludou_allow_se');
這樣就直接在網頁的head部分添加meta聲明:
<meta name="robots" content="noindex,noarchive" />
告訴搜索引擎不要索引本頁面、不要顯示快照。需要注意的是,你的主題目錄下的header.php中必須有以下代碼:
wp_head();
設置文章只允許搜索引擎查看
有些文章只是為了SEO才發布的,想讓這些文章只允許搜索引擎抓取,普通的訪客無法查看,在WordPress中如何做到?
實現代碼
如果你的WordPress站點未開啟頁面緩存,這個需求也不難實現,我們可以參考上面對搜索引擎隱藏特定的文章中的代碼,稍作修改即可。在當前主題的functions.php中添加以下php代碼,用UTF8編碼保存:
// 給文章和頁面的編輯頁添加選項 function ludouseo_add_custom_box() { add_meta_box('ludou_se_only', '搜索引擎專屬', 'ludou_se_only', 'post', 'side', 'low'); add_meta_box('ludou_se_only', '搜索引擎專屬', 'ludou_se_only', 'page', 'side', 'low'); } add_action('add_meta_boxes', 'ludouseo_add_custom_box'); function ludou_se_only() { global $post; //添加驗證字段 wp_nonce_field('ludou_se_only', 'ludou_se_only_nonce'); $meta_value = get_post_meta($post->ID, 'ludou_se_only', true); if($meta_value) echo '<input name="ludou-se-only" type="checkbox" checked="checked" value="1" /> 只允許搜索引擎查看'; else echo '<input name="ludou-se-only" type="checkbox" value="1" /> 只允許搜索引擎查看'; } // 保存選項設置 function ludouseo_save_postdata($post_id) { // 驗證 if ( !isset( $_POST['ludou_se_only_nonce'])) return $post_id; $nonce = $_POST['ludou_se_only_nonce']; // 驗證字段是否合法 if (!wp_verify_nonce( $nonce, 'ludou_se_only')) return $post_id; // 判斷是否自動保存 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; // 驗證用戶權限 if ('page' == $_POST['post_type']) { if ( !current_user_can('edit_page', $post_id)) return $post_id; } else { if (!current_user_can('edit_post', $post_id)) return $post_id; } // 更新設置 if(!empty($_POST['ludou-se-only'])) update_post_meta($post_id, 'ludou_se_only', '1'); else delete_post_meta($post_id, 'ludou_se_only'); } add_action('save_post', 'ludouseo_save_postdata'); function do_ludou_se_only() { // 本功能只對文章和頁面有效 if(is_singular()) { global $post; $is_robots = 0; $ludou_se_only = get_post_meta($post->ID, 'ludou_se_only', true); if(!empty($ludou_se_only)) { // 下面是搜索引擎Agent判斷關鍵字數組 // 有點簡單,自己優化一下吧 $bots = array( 'spider', 'bot', 'crawl', 'Slurp', 'yahoo-blogs', 'Yandex', 'Yeti', 'blogsearch', 'ia_archive', 'Google' ); $useragent = $_SERVER['HTTP_USER_AGENT']; if(!empty($useragent)) { foreach ($bots as $lookfor) { if (stristr($useragent, $lookfor) !== false) { $is_robots = 1; break; } } } // 如果不是搜索引擎,就顯示錯誤信息 // 已登錄的用戶不受影響 if(!$is_robots && !is_user_logged_in()) { wp_die('您無權查看此文!'); } } } } add_action('wp', 'do_ludou_se_only');
使用方法
成功添加以上代碼到當前主題的functions.php後,我們就可以正常使用了,完全傻瓜式。在WordPress後台文章和頁面的編輯頁面,右邊欄底部我們可以看到這樣的選框:
如果當前文章/頁面需要禁止搜索引擎抓取,勾選即可。勾選後,當此文章/頁面被普通訪客訪問時就會顯示下面的錯誤信息(搜索引擎和已登錄用戶不受影響):