聊 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 里写的地址与页面上实际链接是否一致。
发现机制决定蜘蛛能不能找到地址,抓取与索引则取决于站点是否值得被反复访问,两者不要混为一谈。
把发现通路理顺,价值不在于多开几个入口,而在于让每条入口最终指向的,都是同一个有效地址。