抓取路径不是“有一條連結”就算通
很多站点在排查 URL 發現問题时,习惯先看 Sitemap 是否提交、首頁是否挂了連結。這些当然重要,但蜘蛛實际走過的是一條路径:從某個入口頁出發,经過一层层連結,最终到達目标 URL。路径上任何一环断開,後面的頁面都可能長時間停留在“未發現”狀態。
把抓取路径理解為一條鏈,更容易定位問题:入口頁是否可訪問,連結是否真實存在,点击後返回什么狀態碼,頁面内容是否需要渲染,服務器响應是否稳定。下面按這几個环节依次看。
第一關:入口頁和連結是否真實可達
入口頁不一定是首頁。分類頁、聚合頁、Sitemap、甚至外部連結,都可能成為蜘蛛進入站点的起点。入口頁本身如果被 robots.txt 屏蔽、返回错誤狀態,或者需要登入才能看到連結,蜘蛛就难以繼續往下走。
連結可達性則要检查两点:
- 連結是否出現在 HTML 中。如果連結由 JavaScript 在点击後才生成,或者放在需要交互才展開的菜單里,蜘蛛未必會执行到那一步。
- 連結地址是否寫错。相對路径、大小寫、多余空格、參數拼接错誤,都會让連結指向一個不存在的地址。
一個常用做法是,把目标 URL 的完整路径画出来,從入口頁開始逐個点击,观察每一步是否都能正常打開。不要只看首頁,因為很多断点發生在二級或三級頁面。
第二關:狀態碼和重定向是否干净
連結能点開,不代表蜘蛛愿意繼續走。返回 404、410 的地址通常會被放弃;返回 503 的地址可能被暂时搁置;返回 200 才是比較理想的繼續條件。
重定向也要注意。一次 301 跳轉通常可以接受,但多級跳轉、跳轉到無關頁面、跳轉鏈里夹杂 302 或 JavaScript 跳轉,都會增加蜘蛛判断成本。有些蜘蛛在遇到過多跳轉时,會降低對這條路径的信任,甚至不再沿该路径繼續發現新 URL。
排查时可以把重定向鏈完整展開,確認每一跳都指向最终目标,並且最终頁面返回 200。
第三關:渲染之後連結還在不在
現代站点大量使用前端渲染。蜘蛛虽然能执行部分 JavaScript,但执行时机、执行深度和渲染结果並不完全可控。如果連結只存在于客戶端渲染後的 DOM 中,而且没有服務端渲染或预渲染兜底,蜘蛛可能看到的是一個空壳頁面。
检查方法不复杂:用抓取工具關閉 JavaScript 後訪問頁面,看看連結是否還在。如果關閉 JS 就找不到連結,那這條路径對蜘蛛来说就是断的。導航、正文、相關推荐、分頁,這些最需要被發現的区域,尽量保證連結在初始 HTML 里就存在。
第四關:服務器响應是否拖住了路径
即使連結、狀態碼、渲染都没問题,服務器响應慢也會影响抓取路径的连通性。蜘蛛訪問一個頁面时,如果连接超时、响應時間過長、频繁断開,抓取器可能提前結束這次訪問,後面的連結自然不會被繼續發現。
這種情况在流量高峰、資料库压力大、CDN 回源慢的时候更明顯。可以關注几個指标:
- 目标頁面的平均响應時間是否明顯高于站点其他頁面;
- 抓取日誌里是否出現大量超时或连接重置;
- 同一路径下的頁面是否集中出現抓取失敗。
服務器稳定性不是一次性工作,而是抓取路径能否長期通行的基础。至少保證蜘蛛常走的入口頁、分類頁和重要詳情頁有稳定的响應能力。
按顺序排查,比逐個猜更有效
当新 URL 迟迟没有被發現时,可以按抓取路径的顺序排查:
- 找到可能通向该 URL 的入口頁,確認入口頁本身可訪問、未被屏蔽。
- 在入口頁里找到指向目标 URL 的連結,確認連結真實存在且地址正确。
- 点击連結,查看狀態碼和重定向鏈,確認最终頁面返回 200。
- 關閉 JavaScript 再訪問一次,確認連結和内容在初始 HTML 中可见。
- 查看服務器响應和抓取日誌,排除超时、连接失敗等稳定性問题。
這套顺序不能保證 URL 立刻被抓取,但可以把明顯断点先排除掉。很多时候,問题並不是蜘蛛“不想来”,而是路径中間某一环没有走通。把路径修好,蜘蛛才有机會繼續往下發現。