搜索抓取

URL 线索不止藏在 a 标签里:蜘蛛还会从哪些位置读取

蜘蛛解析页面时,能读到的 URL 远不止 a 标签。iframe 的 src、form 的 action、canonical 与 hreflang、结构化数据里的地址,都可能进入抓取队列。本文梳理这些位置的特点、和常规链接的差别,以及运营中该怎么取舍。

搜索抓取

URL 线索不止藏在 a 标签里:蜘蛛还会从哪些位置读取

抓取线索的来源比“链接”两个字更宽

很多人检查内链结构时只盯着 a 标签,觉得页面上没有可点的链接,蜘蛛就没有路可走。实际抓取时,蜘蛛解析 HTML 的过程中会遇到一批带 URL 的字段,它们不一定可点击,但同样可能被记录下来,进入后续的抓取队列。理解这一点,能解释一些看起来奇怪的现象:某个页面谁也没链过,服务器日志里却出现了它的抓取记录。

除了 a 标签,还有哪些位置带着 URL

iframe 与 frame 的 src

内嵌框架的地址是一串完整的 URL。如果 iframe 指向站内某个页面,这条地址有较大概率被读走,成为一条独立线索。反过来,第三方 iframe(广告位、客服组件、统计插件)指向的外部地址也会被解析,只是跟不跟、抓不抓是另一回事。不少站点日志里出现的陌生路径,追根溯源就是这个位置漏出去的。

form 的 action

搜索框、筛选表单、订阅组件的提交地址,通常写在 action 属性里。蜘蛛一般不会真的去提交表单,但 action 里的地址仍是一串可解析的 URL,尤其是当它自带一串查询参数时,容易被当成可访问页面。

canonical 与 hreflang

rel 为 canonical 的 href 是一条明确的 URL 声明,蜘蛛会读,也可能顺着去确认两个地址的关系。hreflang 的 href 同理,多语言站点里,它会把一批本不打算重点抓的版本一并带出来。这些地址如果指向 404 或者参与重定向链,等于给自己制造额外的抓取负担。

结构化数据与脚本里的字符串

JSON-LD 中的 url、@id、sameAs 等字段,往往直接写在 HTML 里,读取成本很低。除此之外,首屏脚本里的路径字符串也可能被解析到,但这取决于渲染是否完整——渲染不充分时,这部分线索等于没写。

资源类地址

img 的 src、video 的 poster、link 标签指向的地址,主要作为资源被请求,一般不会单独当成页面抓取。但如果这类地址指向的其实是 HTML 页面,性质就变了。

这类线索和 a 标签的差别

  • 上下文缺失。没有锚文本,蜘蛛拿不到“这个页面讲什么”的提示,判断价值时缺少依据。
  • 可信度不同。a 标签是被明确推荐的入口;canonical 是归一化声明,不是推荐,不能混为一谈。
  • 触发条件不同。写在脚本里的地址要等渲染,写在属性里的地址解析时就能拿到。
  • 数量容易失控。一个筛选表单、一个广告位,可能带出成百上千条带参数的地址。

实际运营中怎么处理

  1. 该被发现的入口,用 a 标签明写在 HTML 里,不要只挂在点击事件上。
  2. canonical、hreflang 指向的地址要真实可用,别写成 404,也别接进重定向链。
  3. 第三方 iframe 和外链资源尽量收敛,用不到的就别放。
  4. 参数类地址(排序、筛选、追踪码)用 robots 规则或规范化处理,避免被当成独立页面反复抓。
  5. 定期翻服务器日志,确认抓取量集中在哪些 URL 形态上,偏差往往从这里看出来。
蜘蛛愿意读一条 URL,和它愿意把这条 URL 当成重要入口,是两件事。前者是解析,后者才涉及抓取优先级的分配。

几个常见误区

第一个误区,是以为藏起来的链接蜘蛛一定看不到。只要地址出现在 HTML 或渲染后的 DOM 里,就有被读到的可能。第二个误区,是以为所有被读到的地址都会被大量抓取。单次抓取的额度有限,非 a 标签的线索通常排在后面。第三个误区,是把 canonical 当成必须执行的指令——它更像一种建议,蜘蛛会参考,但不保证照做。

归根结底,URL 线索的入口比大多数站点负责人以为的要多。与其事后排查“这条地址是怎么进来的”,不如在写页面时就先决定好:哪些地址该被看见,哪些该留在外面。