在訪客之前找到死鏈
最後更新:
你網站上的每個死鏈都會被人發現。唯一的問題是,發現者是你——在一個安靜的下午執行一次檢查,還是購物到一半的訪客、順著你文件裡的連結找來的客戶,或正在決定你頁面價值的搜尋引擎爬蟲。連結是悄悄腐爛的——頁面搬家、網域更換、圖片改名、合作夥伴改組——而頁面本身不會宣布這種衰敗。本文講何時執行死鏈檢查、它報告的狀態到底是什麼意思、按什麼順序修它找到的問題,以及一次查一個頁面這一做法誠實的限度。
何時執行死鏈檢查
價值最高的時刻,是 URL 成批變化的時刻。改版之後,範本被重建、導覽被重寫,一個正確多年的連結可能悄悄指向新設計不再提供的路徑。遷移之後——新 CMS、新平台、新 URL 結構——每個內部連結實際上都是對內容所在位置的一次新聲稱,其中一些聲稱會是錯的。更換網域之後,舊位址、合作夥伴連結和嵌入圖片全都依賴有人記得寫的重新導向。把檢查作為上線的一部分來跑,而不是等第一次投訴之後。
安靜的時刻同樣重要。刪除或合併內容會讓每個指向它的連結成為孤兒;改動媒體庫或圖片命名規則會在無人記得那次改動幾個月後弄壞圖片;而其他網站改組時不會通知你,所以發布時可用的外部連結會按它們自己的時間表衰敗。一個合理的節奏是:每次結構變更後檢查主頁和關鍵落地頁,再加上定期巡查——對大多數網站每月一次足夠——覆蓋你的訪客和搜尋引擎真正在用的頁面。本站的死鏈檢查器一次查一個頁面,正契合這個節奏:要緊的頁面,被刻意地檢查。
這些狀態到底是什麼意思
連結檢查可以歸結為每個連結一個問題:跟隨這個連結時,伺服器如何應答?正常意味著直接成功(2xx)。重新導向意味著連結要經過一次或多次 3xx 跳轉才通——今天沒問題,但每一跳都是一個必須有人兌現的承諾。損壞意味著 4xx 應答,最常見的是 404 未找到:承諾的頁面不在那裡。伺服器錯誤意味著 5xx 應答:頁面可能存在,但它的伺服器沒能交付它。逾時和無法連線意味著根本沒有可用的應答到達——慢、主機已死、DNS 失敗。而已跳過意味著檢查器刻意沒有擷取該目標,因為它解析到私有或被封鎖的位址。
搜尋引擎讀的是同樣的應答。Google 自己關於 HTTP 狀態碼如何影響其爬蟲的文件說:2xx 回應讓內容可被考慮收錄;爬蟲會跟隨重新導向(預設最多 10 跳),並把最終目標當作真正算數的頁面;返回 4xx 的 URL 不會被收錄——若曾被收錄則會被移出索引——而持續的 5xx 錯誤會拖慢爬取,並最終也可能導致頁面被丟棄。這就是為什麼內部死鏈不只是外觀瑕疵:爬蟲跟過去,什麼也沒得到,連結的價值和目標在索引中的位置一起蒸發。
按這個順序修:內部 404、重新導向鏈、圖片
先修內部 404。指向你自己網站的死鏈完全在你的掌控之中,它擋在你已經贏得的訪客面前,還告訴爬蟲:一個你連結過去的——想必因為重要——頁面並不存在。在源頭修它:頁面是誤刪的就恢復它,URL 漂移了就改正它,或把連結指向真正替代舊頁面的那個頁面。重新導向留給那些可能被外人收藏或連結的位址;你自己頁面上的連結就應該直接是對的。
重新導向鏈第二。搬家後一次重新導向是正常的。鏈——舊 URL 重新導向到較新的 URL、再重新導向到目前的 URL——讓每次點擊多付一趟往返的代價,而且每一跳都是另一條可能在下一次遷移中丟失的規則。把連結本身更新為最終位址;需要看清跳數時,HTTP 狀態鏈追蹤器會把它們逐跳列出。圖片第三。損壞的圖片很少妨礙頁面的閱讀,所以它排在前兩項之後——但還是要修:恢復檔案、改正路徑或刪掉標籤,因為滿是缺圖框的頁面讀起來像被遺棄了,而且有時那張「圖片」其實是正文依賴的圖表或產品照片。
一次一個頁面——以及為什麼這個範圍是誠實的
與本文配套的檢查器每次執行檢查一個頁面、其上最多 300 個連結,並在頁面上明說。這一範圍是一種刻意的取捨。單個頁面可以被足夠快地擷取、解析和完整檢查,從而成為編輯—發布循環的一部分:改頁面、跑檢查、修它找到的問題、發布。它也讓帳目精確——找到多少連結、檢查了多少、多少被列出但從未擷取(mailto:、tel: 和頁內片段不是 HTTP 請求,因此如實報告,而不是套上編造的狀態),並且每當一次執行在覆蓋全部之前停下,結果都標註為部分結果,而不是把默默的截斷打扮成完整。
全站發現是另一件工作、用另一些工具:你的 CMS 知道你發布的每個頁面,你的伺服器日誌顯示真實訪客和爬蟲已經撞上的每個 404,Search Console 報告 Google 本人遇到的錯誤。用它們來決定哪些頁面值得檢查,然後逐個檢查並修你找到的問題。單頁檢查器絕不能做的,是假裝自己是一次爬取;而你絕不能做的,是因為沒有全站工具就連那幾個承載你流量的頁面也不查。
讓它成為習慣,而不是事件
死鏈最少的網站,不是做年度大掃除做得最大的那些,而是把檢查附著在變更上的那些。每當 URL 結構、範本、選單或媒體資料夾變化時,向外連結的頁面在變更被認為完成之前都要過一次檢查。每當內容被刪除時,「什麼連結到了這裡?」這個問題要在答案還容易時被問出來。這個習慣每次變更只花幾分鐘,卻能避免日後對一份上千連結報告做考古。
而當一次檢查確實發現損壞時,修連結,而不只是修症狀:更新源頁面,如果外部世界在用舊位址就為它保留一條乾淨的重新導向,然後對同一頁面再跑一次,親眼看著判定改變。死鏈是少數完全可以用機械方式檢出、且完全在你的能力範圍內修復的網站問題之一——唯一的真正失敗模式,是透過一位先找到它的訪客,第二個得知它。