一個等號引發(fā)的血案(談Nginx正確的404配置)
這是一個血淋淋的教訓(xùn),這么說一點(diǎn)也不過分。因?yàn)樽罱l(fā)生了一個重大問題,網(wǎng)站流量大幅下跌,跌了近80%了。由于事件發(fā)生之前做過一些工作,加了大量友鏈,而且外站權(quán)重都相當(dāng)高,在那天還發(fā)生了一次掛馬事件,當(dāng)然也即時解決了。還做了其它一些關(guān)鍵字內(nèi)、外鏈優(yōu)化等等。這樣使得查找問題的原因就變的難上加難。偶然的原因發(fā)現(xiàn),百度收錄的鏈接開始出現(xiàn)錯誤,由于網(wǎng)站URL方式采用的目錄式結(jié)構(gòu),最后一個字符都是/,然而百度收錄的頁面卻無緣無故把這個線去掉了,而這種訪問方式,我并沒有做兼容。當(dāng)時也查看了網(wǎng)站頁面上的重寫結(jié)果,沒有發(fā)現(xiàn)哪里頁面的鏈接出現(xiàn)過這種錯誤,那么百度里收錄的這些頁面從何而來?真的不得而知了??赡苁峭怄溊镉行┑刂钒涯莻€目錄后的斜線去掉了?不管它怎么收錄的了,盡快做了一下兼容性工作,因?yàn)槟欠N錯誤鏈接會被轉(zhuǎn)到404頁面上去。剛剛又查了一下,發(fā)現(xiàn)了一點(diǎn)蹊蹺。
以下摘自百度百科:
404對seo的影響
自定義404錯誤頁面是增強(qiáng)用戶體驗(yàn)的很好的做法,但在應(yīng)用過程中往往并未注意到對搜索引擎的影響,譬如:錯誤的服務(wù)器端配置導(dǎo)致返回“200”狀態(tài)碼或自定義404錯誤頁面使用Meta Refresh導(dǎo)致返回“302”狀態(tài)碼。正確設(shè)置的自定義404錯誤頁面,不僅應(yīng)當(dāng)能夠正確地顯示,同時,應(yīng)該返回“404”錯誤代碼,而不是 “200”或“302”。雖然對訪問的用戶而言,HTTP狀態(tài)碼究竟是“404”還是“200”來說并沒有什么區(qū)別,但對搜索引擎這則是相當(dāng)重要的。
搜索引擎蜘蛛在請求某個URL時得到“404”狀態(tài)回應(yīng)時,即知道該URL已經(jīng)失效,便不再索引該網(wǎng)頁,并向數(shù)據(jù)中心反饋將該URL表示的網(wǎng)頁從索引數(shù)據(jù)庫中刪除,當(dāng)然,刪除過程有可能需要很長時間;而當(dāng)搜索引擎得到“200”狀態(tài)碼時,則會認(rèn)為該url是有效的,便會去索引,并會將其收錄到索引數(shù)據(jù)庫,這樣的結(jié)果便是這兩個不同的url具有完全相同的內(nèi)容:自定義404錯誤頁面的內(nèi)容,這會導(dǎo)致出現(xiàn)復(fù)制網(wǎng)頁問題。輕則被搜索引擎降權(quán),重則會K掉網(wǎng)站。
而恰恰我發(fā)現(xiàn)這里服務(wù)器上nginx里404的配置就有這樣一個問題,訪問到無效地址的時候,跳轉(zhuǎn)到的404頁面返回狀態(tài)碼是200,汗了。怎么會這樣?
一個等號引發(fā)的血案
最后發(fā)現(xiàn)問題的原因是配置里多余的一個“=”導(dǎo)致的這個狀態(tài)碼錯誤。
現(xiàn)在網(wǎng)上大多數(shù)nginx的404配置寫法還是error_page 404 = /404.html; 注意這是個錯誤的寫法,正確的寫法是沒有這個等號的,就是由于這個等號的指引讓nginx將404的的錯誤進(jìn)入鏈接都以200正常狀態(tài)碼顯示了自定義的404頁面,而這對普通用戶來說看上去無差異,然而給搜索引擎發(fā)出的信號卻是致命的。切忌切忌。因?yàn)榇饲暗姆?wù)器,我一直都是用apache來做的,也是第一次遇到這個問題。改完后用工具檢查一下,已經(jīng)正常了。
其實(shí)這個錯誤如果更好的利用起來的話,還可以將錯就錯,也是跟業(yè)內(nèi)人交流得知的,當(dāng)然這就是一個偏門左道的事了,不在這里教壞大家。當(dāng)然如果外鏈流量小,或者沒有大流量的錯誤鏈接流入的話,這個也就不成立了。
最后可以通過這個工具進(jìn)行檢測:
http://www.seochat.com/seo-tools/check-server-headers/
輸入一個你網(wǎng)站下的錯誤的路徑,檢測出有“HTTP/1.1 404 Not Found”就可以了。
或者使用下面的方法檢查更方便,在命令行下輸入:
# curl -I http://www.yourdomain.com/testurl.html
HTTP/1.1 404 Not Found
Server: nginx/1.4.4
Date: Fri, 10 Jan 2014 02:36:39 GMT
Content-Type: text/html
Content-Length: 1782
Connection: keep-alive
Vary: Accept-Encoding
ETag: “5018ffe4-6f6″
相關(guān)文章
詳解nginx前端根據(jù)$remote_addr分發(fā)方法
這篇文章主要介紹了詳解nginx前端根據(jù)$remote_addr分發(fā)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Nginx實(shí)現(xiàn)高可用集群構(gòu)建(Keepalived+Haproxy+Nginx)
為什么需要搭建Nginx集群?為了防止Nginx單點(diǎn)故障造成服務(wù)器癱瘓,本文介紹了Nginx實(shí)現(xiàn)高可用集群構(gòu)建(Keepalived+Haproxy+Nginx),感興趣的可以了解一下2021-05-05實(shí)現(xiàn)Nginx中使用PHP-FPM時記錄PHP錯誤日志的配置方法
最近在本地搭建的LNMP的開發(fā)環(huán)境。為了開發(fā)的時候不影響前端的正常開發(fā)就屏蔽的PHP里面php.ini中的一些錯誤提示。但是這樣一來,就影響到了后端開發(fā)的一些問題比如不能及時調(diào)試開發(fā)中的一些問題2014-05-05