2012-11-18 43 views
1

我檢查了日誌,發現搜索引擎訪問了我網站上的很多僞造網址。他們很可能來自很多鏈接被改變之前,即使我已經做了301重定向,一些鏈接已經以非常奇怪的方式被改變,並且不被我的.htaccess文件識別。告訴搜索引擎該頁面不存在

所有請求都由index.php處理。如果由於錯誤的URL而無法創建響應,則會顯示自定義錯誤頁面。隨着簡化代碼的index.php看起來像這樣

try { 
    $Request = new Request(); 
    $Request->respond(); 
} catch(NoresponseException $e) { 
    $Request->presentErrorPage(); 
} 

我才意識到,這個頁面會返回一個狀態200告訴機器人,該頁面是有效的,即使事實並非如此。

是否有足夠的添加與在catch語句404頭告訴機器人停止訪問該頁面?

像這樣:

header("HTTP/1.0 404 Not Found"); 

它看起來不錯,當我測試它,但我擔心的是SE機器人(也許用戶代理)將發生混亂。

回答

3

你到達那裏。這個想法是正確的 - 你想給他們一個404。但是,只是一個小小的更正:如果客戶端使用HTTP/1.1進行查詢並且使用1.0來回答,則一些客戶端會感到困惑。

解決這個問題的方法如下:

header($_SERVER['SERVER_PROTOCOL']." 404 Not Found"); 
+0

謝謝!而且你指出了這種可能性!除非沒有人有不同的意見,否則我對你的答案感到滿意,並且會對它進行幾天的測試。 – Anders

1

的SE機器人DO感到困惑,當他們看到這一點:

HTTP/1.1 200 OK 

<h1>The page your requested does not exist</h1> 

或者這樣:

HTTP/1.1 302 Object moved 
Location: /fancy-404-error-page.html 

它解釋here

返回大於404或410,用於一個不存在的網頁(或 將用戶重定向至另一頁面,比如網頁,而不是 返回404)以外的代碼可能會有問題。首先,它告訴搜索引擎 該網址上有一個真實網頁。因此,該URL可能是 已爬網並且其內容已編入索引。由於Googlebot要子虛烏有頁面花費 的時候,你唯一的網址可能不被發現的 迅速或頻繁訪問您的網站的抓取量可能 影響(也,你可能不希望您的網站排名靠前對於 搜索查詢未找到文件)。

您關於以編程方式發送404標頭的想法是正確的,它指示搜索引擎他們請求的URL不存在,並且他們不應嘗試對其進行檢索和索引。設置響應狀態的方法:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found"); 

header(":", true, 404); // this is used to set a header AND modify the http response code 
         // ":" is used as a hack to avoid specifying a real header 

http_response_code(404); // PHP >= 5.4 
+0

非常感謝。我沒有意識到發送頭文件的緊湊方式 – Anders

1

A well-behaved crawler尊重您網站頂級的robots.txt。如果您想排除抓取工具,那麼@ SalmanA的回覆將起作用。一個示例機器人。txt文件如下:

User-agent: * 
Disallow: /foo/* 
Disallow: /bar/* 
Disallow: /hd1/* 

它需要所有人都可讀。請注意,這不會讓用戶離開頁面,只是一個尊重robots.txt的機器人,其中大部分都是。

+0

如果我設置了'Disallow:/',然後在實際工作的URL上設置了Allow:,那麼它實際上可以工作。我沒有想過這個。我想我也會加上這個 – Anders

+0

進一步閱讀告訴我'Allow:'指令不是該協議的一部分,因此可能是不可預知的。任何人都更瞭解這個「問題」? – Anders

+0

這不是一套協議,本身只是一種約定。你可以去,@安德斯 – hd1