蜘蛛拿到一个页面后,先找什么
蜘蛛下载一份 HTML 之后,第一件事是解析。解析的结果有两层用途:一层是理解这个页面讲了什么,另一层是把页面里出现的 URL 收集起来,放进待抓队列。很多人默认「URL 都在链接里」,实际上一份普通页面上的 URL 出处比想象中多。
把这些来源理清楚,才能判断某个入口值不值得依赖。
不同位置的 URL,被对待的方式不一样
a 标签的 href
这是最明确的信号。蜘蛛看到一个 a 标签,会把它理解成「这里指向另一个页面」,并且倾向于继续跟进。锚文本还会影响它对目标页面的判断。内链结构能不能起作用,基本取决于这一层写得清不清楚。
img 的 src 与 srcset
图片地址会被抓,但抓的是图片本身。蜘蛛通常不会把一张图的 URL 当成一个需要继续爬的页面入口。srcset 里的多套尺寸同理,它带来的是资源请求量,而不是页面发现。
script、link 与样式表
外链 JS 和 CSS 会被请求,因为渲染需要它们。至于文件内部的字符串,比如路由表里拼接出来的路径、接口地址,通常不会因为出现在 JS 里就直接进入抓取队列。这也是纯前端路由页面容易被漏掉的原因:它们在 HTML 层面看起来就是没有链接。
iframe
iframe 指向的文档是另一份独立资源,可能被单独抓取,但它与主文档之间的关系不像普通内链那样传递,也不适合当作主站页面的发现路径来用。
link 与结构化数据里的 URL
canonical、alternate、hreflang 里的地址,主要作用是告诉蜘蛛「这几条 URL 描述的是同一页」或者「这是另一种语言版本」。它们参与 URL 归并,但不会被当成普通的内链入口去分发抓取机会。JSON-LD 里写的 URL 也类似,更多是补充信息。
真正能控制抓取路径的还是内链
上面这些位置可以帮蜘蛛发现资源,却很难帮它发现页面。如果希望某个详情页被稳定看到,务实的做法是给它一条清晰的 a 标签路径:
- 栏目页里给出到详情页的直达链接,而不是只放一张图或一个按钮
- 面包屑用 a 标签写,别拿纯文本分隔符凑数
- 相关推荐、上一页下一页保持真实链接
- 分页与筛选入口按需开放,避免组合数量失控
内链的价值不只是「有一条路」,还包括这条路有多顺。层级浅、文本清楚、指向稳定的链接,跟进意愿更高,站内页面之间分到的机会也更均匀。
Sitemap 是补漏,不是替代
Sitemap 适合放那些内链覆盖不到、又确实希望被抓的 URL,比如新上线的页面、埋在深处的存档页。它相当于给蜘蛛一份额外清单,但不能替代站内链接。一个页面既没有内链入口,又长期没有外部链接指向,只靠 Sitemap 出现,被抓的频率往往偏低,后续更新也不容易被及时发现。
动手检查的几个点
- 用不执行 JS 的方式打开页面,看还剩多少条 a 标签链接
- 在浏览器里检查导航、面包屑、列表页的链接是不是真的 href,而不是 onclick 或 JS 跳转
- 看看关键页面从首页出发需要几跳,有没有绕远路
- 确认 Sitemap 里的 URL 与站内实际链接指向同一套地址,别出现 http 与 https、带不带 www 混用
- 留意服务器响应是否稳定,响应时间波动大时,抓取节奏往往会跟着收缩
URL 发现是抓取的前置条件。把入口放在蜘蛛看得懂的地方,比事后补交清单更省事。