不少人在入口页做优化时,会想到用 JSON-LD 来放目标链接,理由也很直接:结构化数据是搜索引擎官方支持的格式,看起来比一堆 a 标签更“正规”。但把它当成链接发现的通道,通常是要落空的。
先说结论:JSON-LD 里的 URL 是数据,不是链接
搜索蜘蛛发现 URL 的主要途径,是解析 HTML 里能构成链接的节点:a 标签的 href、link 标签、表单 action、iframe src 等。这些元素在文档里承担的是“导航”语义,爬虫会按链接规则去解析、去重、排队。
JSON-LD 是一段脚本内容,它的作用是向搜索引擎描述页面实体,比如这是什么页面、属于谁、价格多少。里面的 URL 字段是属性值,不是可点击、可跳转的链接。爬虫读它,是为了理解实体关系,不是为了顺着它去发现新页面。
为什么这个误解很普遍
- 结构化数据确实会被解析,URL 字段也确实能被读到,于是“能读到”被误当成“会跟进”。
- 某些结构化数据里的 URL 会影响索引展示,比如面包屑、站内搜索框,这让人以为它同样能带爬虫进入新 URL。
- 有些页面同时存在 a 标签和 JSON-LD,爬虫跟着 a 标签抓到了目标页,结果被算成 JSON-LD 的功劳。
和普通 a 标签的差别在哪
- 语义不同:a 标签表达的是导航关系,结构化数据表达的是属性描述。
- 去重与优先级不同:爬虫会把 a 标签收进待抓队列并排优先级,单纯的字符串没有这个待遇。
- 可控性不同:a 标签能被 rel 属性、锚文本、所在位置影响,JSON-LD 基本只能被动等待解析。
- 容错不同:JSON-LD 一旦语法出错,整段可能被丢弃;a 标签写错顶多这一条没用。
什么情况下结构化数据里的 URL 会被用到
如果这个 URL 本来就是一个可索引的实体地址,比如 canonical、面包屑里的页面地址、图片的 contentUrl,搜索引擎可能会拿它去核对信息、补充展示。但前提通常是:这个 URL 已经通过其他方式被发现,结构化数据只是让描述更准确,而不是负责发现。
把发现渠道和描述渠道分开看:发现靠链接和站点地图,描述靠结构化数据。两者混用,最容易出现“写了却迟迟没被抓”的情况。
更稳妥的做法
- 目标链接老老实实写成 a 标签,放在正文里,别只放在脚本里。
- JSON-LD 保留,用来补充实体信息,但不要指望它承担发现任务。
- 重要 URL 同时进站点地图,减少对单一渠道的依赖。
- 入口页数量变多以后,定期抽查抓取日志,看目标 URL 是被哪条路径带进去的。
怎么验证是不是真的被发现了
- 在服务端日志里搜目标 URL 的路径特征,看有没有搜索蜘蛛的访问记录。
- 做对比:把 JSON-LD 里的链接挪到 a 标签,观察目标 URL 首次被抓的时间是否变化。
- 用抓取工具模拟,检查渲染后的 DOM 里有没有真正的链接节点。
最后提醒一句:入口页本身的设计、站点整体质量、抓取预算都会影响跟进速度。把链接写在 JSON-LD 里不会立刻带来什么惩罚,但它也不是一条捷径,指望靠它提升发现效率,多半会失望。