把 URL 提交给搜尋引擎,或者寫進 Sitemap,並不等于蜘蛛马上會来抓。很多站点运营者會把“提交”和“抓取”当成一回事,结果在日誌里等不到蜘蛛,就開始怀疑提交入口失效。其實,URL 發現和 URL 抓取是两個阶段,中間還隔着队列、優先級、服務器响應等环节。
發現和抓取是两條线
發現,是蜘蛛知道某個 URL 存在,把它放進待抓列表;抓取,是蜘蛛真正發起請求,把頁面内容取回去。一個 URL 可以被發現很久却不被抓起,也可以被抓取多次却始终不收錄。排查时把這两件事分開看,思路會清楚很多。
蜘蛛發現 URL 的常见入口
- 外鏈:其他站点鏈過来,蜘蛛顺着連結發現你的頁面。新站尤其依赖這一点。
- 站内連結:導航、列表頁、正文内鏈、面包屑,都是蜘蛛在站内繼續走的路径。
- Sitemap:主動告诉蜘蛛有哪些 URL,适合數量多、层級深的頁面。
- 主動提交:搜尋资源平台提供的提交入口,可以缩短發現時間,但不保證抓取。
- 蜘蛛池或诱導抓取:通過大量頁面吸引蜘蛛訪問,把目标 URL 带進去。它解决的是“被發現”的問题,抓取與否仍要看目标頁本身。
發現之後,為什么没抓
1. 服務器和抓取通道
蜘蛛来的时候如果遇到 5xx、超时、连接被重置,或者返回了驗證碼、登入墙,這次抓取就失敗了。失敗次數多了,蜘蛛會降低来訪频率。检查服務器日誌时,不要只看有没有蜘蛛,還要看它拿到的狀態碼和响應時間。
2. 頁面本身的可抓取性
robots.txt 是否誤屏蔽、頁面是否被 noindex、是否依靠 JavaScript 才渲染出内容、是否有大量重定向,這些都會影响蜘蛛能不能顺利拿到有效内容。尤其注意:被 robots 屏蔽的 URL 可能仍然出現在“已發現”列表里,但蜘蛛不會去抓。
3. 抓取预算和優先級
站点越大,蜘蛛越會挑着抓。它通常優先抓更新频繁、内鏈多、歷史表現好的頁面。一個孤立的、没有入鏈的 URL,即使提交了,也可能排在队列後面。可以把它放進合适的列表頁或正文内鏈里,让它有路径可走。
做一次“發現到抓取”的對帳
- 從 Sitemap 或提交记錄里取一批 URL,作為待核對名單。
- 到服務器日誌里搜這些 URL,看蜘蛛有没有来過、来的時間、狀態碼。
- 對没来過的 URL,检查它是否有站内入鏈,是否被 robots 屏蔽,是否在 Sitemap 里可訪問。
- 對来過但狀態異常的 URL,優先修服務器、重定向和渲染問题。
- 把修复後的 URL 重新放回内鏈或 Sitemap,观察下一轮日誌。
几個容易踩的誤区
- 提交了就會抓:提交只是發現入口之一,抓取還受队列和優先級影响。
- Sitemap 寫了就會抓:Sitemap 里的 URL 也需要可訪問、可索引,否則蜘蛛来了也拿不到東西。
- 内鏈多就一定抓:内鏈數量不是唯一因素,連結所在頁面的质量、位置和稳定性也在起作用。
- 蜘蛛池能替代基础建设:诱導抓取可以增加發現机會,但服務器、内容、内鏈结构不過關,抓取仍然會卡住。
URL 發現解决的是“蜘蛛知不知道”,抓取解决的是“蜘蛛来不来、拿不拿得到”。把這两步分開排查,比反复提交更有用。
實际运营中,可以固定一個周期,把日誌、Sitemap 和内鏈结构放在一起看。發現入口少了就补入口,入口有了但抓取異常就修服務器和頁面。這样一轮一轮下来,URL 從被發現到被抓取的路径才會越来越顺。