搜索抓取

除了 a 标签:蜘蛛还能从哪些地方捡到 URL

蜘蛛发现 URL 的入口不止 a 标签。canonical、hreflang、HTTP Link 头、Sitemap、Feed 和 JSON-LD 里的地址,作用各不相同:有的会被跟随,有的只是语义声明。本文梳理哪些位置值得投入,哪些不该当成唯一入口。

搜索抓取

除了 a 标签:蜘蛛还能从哪些地方捡到 URL

做站内链接的时候,大多数人的注意力都放在 a 标签上:href 写没写、锚文本对不对、要不要加 nofollow。这当然没错,a 标签确实是蜘蛛发现 URL 最稳定的入口。但一个页面里能“说出”地址的地方远不止 a 标签,其中一部分蜘蛛会跟着走,一部分只是当作参考,还有一部分几乎不产生抓取行为。把这几类分清楚,能少走不少弯路。

蜘蛛通常会跟随的几种位置

在主流的抓取实现里,下面这些位置出现的 URL,一般会被当作可抓取线索:

  • a 标签的 href:最基础也最可靠的一条路,站内导航和正文内链都应该走这里。
  • area 标签的 href:老式图片热区地图里用得多,现在虽然少见,但依然有效。
  • iframe 的 src:是否被跟随取决于具体实现和渲染方式,正文内容不要只靠 iframe 承载。
  • link rel 系列:canonical、alternate 与 hreflang、next 与 prev、amphtml 这些声明,蜘蛛会读取并按语义处理。
  • HTTP 响应头里的 Link:例如 rel=canonical 或 rel=preload 指向的地址,通常会被读到,但优先级低于页面内的真实链接。

JS 渲染出来的链接:能用,但别当成唯一通道

用脚本拼出来的 URL、绑定在点击事件上的跳转、用 pushState 改写的地址栏,这些对蜘蛛来说都不是天然的链接。支持渲染的抓取程序会把页面执行一遍再提取链接,但中间隔着渲染队列和等待时间:脚本报错、内容要交互才出现、渲染超时,链接就可能被漏掉。

比较稳妥的做法,是让关键页面在 HTML 里同时保留一份真实的 a 标签。脚本负责体验,不负责充当唯一的发现入口。

Sitemap 与 Feed:两条显式投喂通道

Sitemap 是最直接的 URL 清单,尤其适合入口很深、内链很少的页面。它的作用是告诉蜘蛛“这些地址存在”,并不保证一定被抓取或收录。

RSS 或 Atom Feed 常被忽略。对更新频繁的栏目来说,Feed 是一条轻量的发现通道:新内容一发布就出现在一个体积小、结构稳定的 XML 文件里,蜘蛛拿取成本低。当然,它只对会去读该文件的抓取程序起作用,替代不了站内链接。

JSON-LD 和结构化数据里的 URL

结构化数据里的 url、@id、sameAs 字段,主要用途是描述实体关系,而不是导航。蜘蛛会读取这些内容,但其中的地址一般不会像 a 标签那样被当成新的抓取入口。把重要页面只写在 JSON-LD 里,是常见的一厢情愿。

一张可以照着排的优先级清单

  1. 导航、面包屑、正文内链:用 a href,并确保服务端能渲染出真实地址。
  2. 深层页面:补进 Sitemap,同时尽量在内链里给它一两个入口。
  3. 更新频繁的栏目:可以提供 Feed 作为辅助通道。
  4. 规范与多语言:用 canonical、hreflang 把语义说明白,别让蜘蛛去猜。
  5. 纯脚本入口:至少保留一个 HTML 链接作为兜底。
发现通道可以有很多条,但只有 a 标签是你能完全掌控的那一条,其余的更适合当作补充。

最后提醒一句:URL 被蜘蛛看到、被抓取、被收录,是三件不同的事。多铺几条发现路径,只是把“看到”这一步做得更稳,后面的结果仍然取决于内容本身和站点整体的抓取状况。