聊 URL 發現时,多數人只盯着两處:Sitemap 和内鏈。這两條确實是主干,但蜘蛛拿到新地址的入口並不只有它們。搞清楚其余几條通路,能解释一些“明明没加連結,頁面却被抓了”,以及“連結加了,蜘蛛就是不来”的現象。
站外引用:最古老的發現方式
別的站点鏈到你的 URL,蜘蛛顺着那根連結就能找到你。這條通路不依赖站内任何配置,也不依赖 Sitemap 是否及时更新。它的邊界在于:外鏈所在的頁面本身也要被抓到。如果對方站点抓取频率很低,或者連結出現在渲染後才生成的区域,發現就會延迟。
几個容易被誤判的细节
- 带 nofollow 的外鏈:連結仍可能作為發現线索出現,但不應指望它传递權重。
- 跳轉類連結:部分平台用中間頁跳轉,蜘蛛要先跟到中間頁,再跟到目标,比直鏈多一步。
- 被引用的地址已经失效:如果外鏈指向的是 404 或舊的重定向地址,等于把一次抓取机會花在了無效路径上。
重定向鏈的末端
301、302 的目标地址本身就是發現来源。常见场景是舊域名整体跳到新域名,蜘蛛會逐步把新域名下的 URL 纳入抓取范围。但鏈越長,每次跟随的成本越高,中途任何一环超时或返回错誤,後面就断了。把跳轉控制在一次以内,對抓取效率更友好。
Feed 與结构化資料
RSS、Atom 長期是一種轻量的 URL 發布方式,蜘蛛可以定期讀取 Feed 获得新條目,适合更新频繁的栏目。结构化資料則是另一回事:其中的 URL 通常被当作描述信息,而不是可跟随的連結。指望靠 JSON-LD 里的字段来發現新頁面,作用很有限。
响應头里的位置信息
HTTP 响應头可以携带 Location(跳轉目标)與 Link 头(用于声明 canonical、alternate 等關系)。這些字段主要服務于语义表達,並不是為發現新 URL 设計的通道。把它們当作辅助信号即可,不要作為主要手段。
JavaScript 渲染出来的連結
如果導航和列表是靠前端脚本插入 DOM 的,原始 HTML 里就没有這些連結。蜘蛛需要先渲染頁面,才能“看见”它們,這意味着發現會被推迟;渲染资源不足或超时的情况下,連結可能迟迟不出現。關键路径上的 URL,最好在服務器直接返回的 HTML 里就带上普通連結。
被發現只是第一步
一個 URL 被蜘蛛看到,离進入索引還有好几道關:robots.txt 是否允许、頁面返回什么狀態碼、内容是否值得占用一份抓取预算、站点整体响應是否稳定。發現通路再多,如果服務器经常超时,蜘蛛也會主動降低訪問频率。
可以马上做的几項检查
- 抽查外鏈来源指向的 URL 是否仍是目前有效的規范地址,避免把抓取引到舊連結。
- 收敛重定向鏈,让舊地址尽量一步跳到最终地址。
- 對比渲染前後的 HTML,確認關键導航連結在原始源碼里就能看到。
- 在訪問日誌中筛出蜘蛛對新 URL 的首次訪問時間,看看從發布到被抓隔了多久。
- 核對 Sitemap、Feed 里寫的地址與頁面上實际連結是否一致。
發現机制决定蜘蛛能不能找到地址,抓取與索引則取决于站点是否值得被反复訪問,两者不要混為一谈。
把發現通路理顺,價值不在于多開几個入口,而在于让每條入口最终指向的,都是同一個有效地址。