2010-10-13 32 views
1

我的地方,每頁顯示30條有一個動態的審查制度,並在到達30條是分頁。所以,我有諸如返回404,如果不存在的頁面#PHP

/評論/城市/波士頓/

/評論/城市/波士頓/頁/ 2/

/評論/城市/波士頓/頁/ 3/

等等等等

不幸的是,谷歌似乎是通過索引什麼似乎像推理網頁 - 如

/評論/城市/波士頓/頁/ 65/

本頁面絕對不存在的,我想告知的,谷歌。目前它顯示一個評論頁面,但沒有評論。我無法想象這對SEO很好。所以,如果首先檢查我的MySQL查詢中的#個結果,並且如果沒有結果返回404並將它們轉發到主頁或另一個頁面,我該怎麼辦。

目前,這就是我。

if (!$validRevQuery) { 
    header("HTTP/1.0 404 Not Found"); 
    header("Location: /index.php"); 
    exit; 
} 

我在正確的軌道上嗎?

+1

我不會放出一個404然後重定向,它的有點矛盾,只是做一個像樣的404頁面 – Hannes 2010-10-13 14:56:22

+0

如果你想要一個404,它只是搜索引擎擊中該查詢,那麼爲什麼不只是重定向到一個不存在的頁面,讓服務器處理剩下的事情?不是很乾淨,如果用戶點擊它,但它只需要1行代碼:-) – Kendrick 2010-10-13 14:58:21

+0

不一定。是否有任何類型的關閉檢查機制,你正在使用? – 2010-10-13 14:59:14

回答

4

重定向是一個狀態碼,正如404。你不能有兩個狀態碼。

您需要輸出404種狀態,並在同一時間顯示的響應體(=一個錯誤頁)。

if (!$validRevQuery) { 
    header("HTTP/1.0 404 Not Found"); 
    .... output full HTML structure here ..... 
    exit; 
} 
+0

謝謝!這很有幫助! – Yev 2010-10-13 16:36:16

0

你不能這樣做同時發送404個狀態碼,並做了重定向(通常3xx status code)。您只能執行其中一項操作:發送404狀態代碼和錯誤文檔以重定向進行響應。

0

正如佩卡所說,最好的選擇是做一個404狀態,然後把404頁面的代碼放在那之後。 如果你只是301(重定向)頁面,這是不好的做法,因爲搜索引擎將繼續訪問該頁面,以查看重定向是否仍然存在。