Google網站管理員工具的驗證方式有兩種,一個是通過Html文件,或一種是通過meta標簽。通常情況下,這兩個方式直接就可以通過驗證了。但是也有不同的情況,就是今天我遇到的情況!
我按Google的說明,上傳了google的Html文件到網站的跟目錄,但就是無法通過驗證,報錯是:
我們檢測到您的 404(找不到文件)錯誤頁在標頭中返回了 200 (成功) 狀態。
從說明上來看,他應該是也查我網站的404頁面,而我的404頁面是返回了200,而不是404。於是我隨便打了一下一個錯誤的頁面,發現,返回確實是200。那麼我是不是把這個404頁面加一個header 404就可以了呢? 是的:
只在要404頁面的頭部加上:
header("HTTP/1.0 404 Not Found");
就可以了!
這樣,驗證就通過了! 但是,我這個404頁面其實不是單純的404頁面,我還想讓Google收錄呢,而如果返回404,Google就不收錄了。不能為了驗證這個,我就不作200了,那麼怎麼呢?
我想了一下,Google如果過來訪問我的404,他的user agent一定不一樣,於是,我在服務器端把所有訪問的user agent 都記錄一下,發現了Google在作這個驗證時,共訪問我404頁面3次,而且三次的uset agent 都是不一樣的,分別是以下:
Google-Sitemaps/1.0
Google-Site-Verification/1.0
Mozilla/3.0 (compatible; Indy Library)
正常的Google爬蟲是不是用這三個user agent的,從字面上來看,一個是google驗證的,一個是google sitemap的,另一個應該是一個開源的什麼東西!
所以,在404的開頭如果判斷一下user agent,如果是三個,就返回404,否則全是200就行了:
<?PHP
$googleArray = array(
'Google-Sitemaps/1.0',
'Google-Site-Verification/1.0',
'Mozilla/3.0 (compatible; Indy Library)'
);
if(in_array($_SERVER['HTTP_USER_AGENT'], $googleArray)){
header("HTTP/1.0 404 Not Found");
} else{
header("HTTP/1.0 200 OK");
}
?>
OK,這樣,驗證就通過了!
但這樣,說實在的不太好,404就應該是返回404,但有時有別的用處,也是沒有辦法的事! 只能這樣了!