微信客服
Telegram:guangsuan
电话联系:18928809533
发送邮件:[email protected]

为什么你的面包屑导航(Breadcrumbs)谷歌不显示

本文作者:Don jiang

谷歌未显示您的面包屑导航,通常是因为结构化数据代码存在错误。谷歌要求严格遵循 Schema 的 BreadcrumbList 规范(强烈推荐 JSON-LD 格式)。

快速解决步骤:

  1. 检测: 使用“谷歌富媒体测试工具”扫描您的网页 URL,修复所有标红的语法报错。
  2. 提交: 确认无误后,在 Google Search Console 中请求重新抓取(通常需要 1 到 2 周的时间生效)。

注:即使代码 100% 正确,最终是否展示仍由谷歌算法根据页面权重动态决定,但确保底层代码 0 错误是基础。

未正确添加 Schema结构化数据

很多页面已经做了前端面包屑,但谷歌看的是可解析的 BreadcrumbList。常见问题不是“没写”,而是层级项缺字段、position 顺序不连续、链接不是可抓取 URL、页面可见路径和标记内容对不上、同页存在两套冲突数据。Google 也明确说明:结构化数据要与页面内容一致,才有资格被用于搜索展示;通过测试工具,也不等于一定会显示。

谷歌读懂了吗

页面顶部出现 Home > Category > Page,只能说明前端把一条导航渲染出来了;Google 读到的却是另一套信息:HTML 链接、JSON-LD、Microdata、内部链接关系、canonical、可抓取状态。Google Search Central 对 Breadcrumb 的定义写得很清楚:它表示页面在站点层级中的位置,供搜索系统理解页面路径。Schema.org 也说明,BreadcrumbList 是一串按顺序排列的已链接网页,顺序依赖 position 重建。页面上有 3 级文字,不等于搜索系统已经得到 3 个可用节点。

先看用户端和抓取端的差别。用户看到的是视觉结果,搜索系统拿到的是源码结果。导航组件可能由 React、Vue 或主题模板在浏览器端拼出来,浏览器 0.5 秒后能看到,不代表 Google 在首次抓取时就能拿到同样内容。页面里如果只有前端生成的文字链路,没有稳定输出的 BreadcrumbList,搜索系统需要自己推断路径;一旦目录、分类、参数页同时存在,推断结果就会偏。

再往前一步,很多站点的问题不在“没有显示给用户”,而在“显示层和数据层不是同一条路径”。页面顶部写 Home > Men > Shoes > Running,JSON-LD 输出成 Home > Shoes > Running,源码里还有一套 Microdata 写成 Home > Sale > Running。用户只看得到 1 条,搜索系统却收到 2 到 3 条版本。

Rich Results Test 只能告诉你“哪类富结果可以生成”,不会替你判断 3 条路径里哪一条代表页面真实层级。工具能解析,不等于搜索结果会采用。

这个差异放到真实页面上,通常会出现在下面几种场景里:

  • 页面顶部有面包屑,源码里没有 BreadcrumbList

  • 页面源码有 BreadcrumbList,但可见路径与之不一致

  • 页面有 4 级路径,结构化数据只写了 2 级

  • 同一页面被主题、插件、应用各输出 1 套数据

  • 中间层级是搜索页、筛选页、参数页,不是正式 URL

  • 最后一级名称与当前页标题差距很大

上面任意 2 项同时出现,Google 解析时就不再是“读一条确定路径”,而是“从多条信号里选一条最像的”。Google 的结构化数据测试页也提醒得很明确:Rich Results Test 看的是 Google 支持的结果能否生成;泛 Schema 校验则要用别的验证器。二者都不负责替搜索结果背书。

可以把“用户看得到”拆成 3 层,再看哪一层没有传到 Google:

层级 用户端状态 搜索系统需要的内容 常见断点
视觉层 顶部出现 3 到 5 级导航 不需要样式,需要可解析节点 只有 CSS/JS 渲染文字
源码层 页面源码包含链接 需要 BreadcrumbListListItemposition 字段缺失、层级不完整
站点层 页面属于目录树 需要内部链接、canonical、可抓取 URL 一致 目录树混乱、入口多版本

一旦视觉层正常、源码层缺失,用户会说“我明明做了面包屑”;源码层正常、站点层混乱时,开发会说“代码测试通过了”;从搜索系统视角看,这两种情况都还没到可稳定采用的程度。

还有一个经常被误解的点:用户在搜索结果里没看到 Breadcrumb,不一定是页面解析失败。Google 已在 2025 年 1 月 23 日开始全球调整移动端搜索结果的 URL 展示方式,手机和平板结果通常只显示域名,不再展示以 > 连接的 URL 层级;桌面端仍可能显示面包屑式路径。

也就是说,移动端“没显示”有时是展示策略变化,不是页面没被理解。排查时至少要区分设备:桌面端看结构展示,移动端先看是否属于 Google 的显示收缩。

这会影响很多站长的判断。用户在桌面端看站内页面,能看到完整路径;再拿手机搜品牌词,只看到域名,于是以为 Breadcrumb 失效。实际上,页面结构化数据可能完全正常,只是移动端 SERP 不再把那条路径显示出来。

判断有没有被读懂,不要只盯着手机结果,要结合源码、测试工具、桌面 SERP、Search Console 里的增强结果状态一起看。Google 的帮助文档没有把“显示”当作必然结果,它说的是“can help users understand and explore a site effectively”,不是“提交就展示”。

从用户视角去理解,最容易出错的是把“看见导航”当成“搜索系统拿到结构”。前者依赖浏览器渲染,后者依赖语义标记和抓取稳定性。一个常见例子:电商页顶部显示 Home > Women > Jackets > Waterproof,但实际 URL 是 /collections/sale/products/x,canonical 指向另一个集合页,JSON-LD 又写成 /women/jackets/。用户点进去觉得路径没问题,因为页面能回到上一级;Google 则会看到 3 组不同的父级关系,站点层级不再固定。

Schema.org 对 BreadcrumbList 的要求里提到“通常以当前页结束”,这里“当前页”如果和 canonical 指向页不是同一对象,路径就会飘。

再看源码层的几个细节,很多都不会影响用户阅读,却会影响机器理解:

  • position 从 0 开始,而不是 1、2、3

  • name 写了营销词,不是导航名

  • item 指到 302 跳转页

  • 页面有 4 级目录,只输出前 2 级

  • 最后一项没有对应当前文档

  • 面包屑随入口不同而变化,A 入口是 3 级,B 入口是 4 级

用户几乎不会因为这 6 项发现异常,搜索系统却要靠它们判断“这是不是一条稳定链路”。Schema.org 文档写得很具体:position 用来重建项目顺序,BreadcrumbList 由已链接网页组成,通常至少要有 URL 和名称。少 1 个维度,机器就少 1 个判断锚点。

还有 CMS 场景。WordPress、Shopify、headless CMS、模板市场主题都可能自动输出一套面包屑,SEO 插件再输出第二套。用户看到的只有模板那一条,Google 抓的是两套甚至三套。第二套如果藏在 <script type="application/ld+json"> 里,第三套来自旧版 Microdata,前端团队平时不会去翻源码,很容易一直以为“用户看见就够了”。等到 SERP 不显示、或 Search Console 报冲突,才发现页面里同一个名称对应了两个不同父级。

可以用一组很短的检查,把“用户看见”和“Google 读懂”分开:

  • 浏览器里看:顶部是否有 3 到 5 级清楚路径

  • 查看源码:搜索 BreadcrumbList 出现几次

  • 对照当前页:最后一项是否对应当前 URL

  • 查中间层级:每一级是否返回 200,而不是 301/302/404

  • 跑测试:Rich Results Test 是否能识别 Breadcrumb

  • 对照设备:桌面 SERP 与移动 SERP 是否被同样显示

这 6 步里,前 2 步确认“有没有传出去”,中间 2 步确认“传的是不是正式路径”,最后 2 步确认“Google 有没有条件展示”。只做第 1 步,得到的只是用户界面答案。

再补一条常被忽略的细节:Google 推荐先用 Rich Results Test 看页面里哪些 Google 支持的富结果可以生成;如果想做通用 Schema 校验,还要用 Schema Markup Validator。也就是说,页面“通用 Schema 没报错”和“Google 识别到 Breadcrumb”不是同一回事。很多开发只跑了 1 个通用检查器,看到 JSON 合法就停了;实际上 Google 是否识别到 Breadcrumb,要看 Google 自己支持的类型、字段和页面条件。

所以,用户看得到面包屑,只能证明页面界面完成了一半;Google 已经读懂,至少还要满足另外一半:源码里有可解析的 BreadcrumbList,节点顺序和页面路径一致,链接都是正式可抓取 URL,当前页和链尾一致,而且展示设备没有被 Google 的界面策略收缩掉。

字段和层级写错了

很多页面不是完全没加面包屑标记,而是写成了“能被前端显示,不能被搜索系统稳定重建”的状态。Google 的 Breadcrumb 文档要求使用 BreadcrumbList,列表项通常放在 itemListElement 里,每一级用 ListItem 表示;Schema.org 还明确写了,列表顺序要靠 position 重建,而且这条链通常以当前页结束。少 1 个字段,顺序跳 1 位,或者最后一级没落到当前页,代码看起来还能跑,搜索结果里却可能不采用这条路径。

先看最常见的一组错法。页面源码里有 3 级路径,前端显示也是 3 级,但 JSON-LD 只写了 2 个 ListItem;或者一共 4 级,position 却写成 1、2、4、4。Schema.org 对 BreadcrumbList 的说明很:position 用来恢复顺序,默认约定是升序排列。顺序字段一旦重复、跳号、倒序,搜索系统拿到的不是“4 个页面的链路”,而是“4 个名称相近但关系不稳定的节点”。

再往下看,字段错并不只是一两个拼写问题,更多是结构关系没交代完整。下面这 6 类情况出现频率很高:

  • @type 写成了 ItemList,没有写 BreadcrumbList

  • itemListElement 里放的是纯文本,不是 ListItem

  • 只有 name,没有 item

  • item,但 URL 指向重定向链、参数页或 404

  • position 从 0 开始,或者用字符串乱排

  • 最后一级不是当前页,而是上一级分类页

Google 把面包屑描述为“页面在站点层级中的位置”,Schema.org 也把它定义为一串已链接的网页。层级里每一级都要能对应到一个可理解的页面,不是只把名称排出来就算完成。

用户自己排查时,最容易漏掉的是“页面可见路径”和“结构化数据路径”不是同一套。页面顶部写着 Home > Shoes > Running Shoes > Men,JSON-LD 里却输出成 Home > Men > Running Shoes。浏览器里看,两者只差了 1 级;搜索系统里看,站点关系已经变了。Google 在结构化数据说明里写得很清楚,标记是给搜索系统理解内容用的,不是只给测试工具过语法用的。

还有一类问题常出在 CMS、主题和插件叠加输出。一个页面里同时出现 2 套 Breadcrumb 数据,肉眼不容易发现,因为其中 1 套可能在 <script type="application/ld+json"> 里,另一套可能是 Microdata。最终页面给 Google 的不是 1 条路径,而是 2 条不同版本的路径。4 级层级和 3 级层级并存,第二级 URL 不同,最后一级名称不同,系统就要自己判断哪条更可信。Google 的测试页也说明,工具只能看“哪些 Google 支持的结果可以生成”,不是保证展示。

把问题拆到字段层面,会更容易定位。下面这张表可以对照源码检查:

检查项 正常写法 常见错误 影响
类型 BreadcrumbList 写成 ItemList 或别的类型 Google 不一定按面包屑理解
列表项 ListItem 塞文本或普通对象 节点关系不完整
顺序 1,2,3,4 1,2,4,4 或 0,1,2 顺序无法稳定恢复
名称 与页面导航一致 名称简写、换词、错词 页面路径对不上
URL 每级对应真实页面 参数页、脚本链接、404 中间层级不可用
终点 当前页面 分类页或父级页 链条没有落到当前页

表里每一行都不算复杂,但只要命中 2 行以上,搜索结果不采用 Breadcrumb 的情况就会明显增加。尤其是 3 级以上路径,一旦第二级和第三级位置交换,整条链会偏得很明显。Google 示例里反复强调的就是层级顺序和节点定义,不是装饰写法。

继续往后查,经常会看到“最后一级要不要带链接”这个问题。Schema.org 说这条链通常以当前页结束,Google 的示例里也存在当前页作为最后一项的写法。实操里更重要的不是“最后一级有没有链接样式”,而是“最后一级在数据里是否明确指向当前文档”。页面 canonical 是 A,Breadcrumb 最后一项却写到 B,或者最后一项名称与 <title>h1 相差很大,系统就很难把当前文档和链尾绑定起来。

可以按下面 3 组去做人工检查,每组 3 到 5 分钟就能发现大部分问题:

  • 看源码

    • BreadcrumbList 出现几次

    • ListItem 一共有几项

    • 检查 position 是否连续

    • 看最后一级是否对应当前 URL

  • 看页面

    • 顶部导航显示几级

    • 分类名称和 JSON-LD 是否一字不差

    • 当前页名称有没有被缩写

    • 面包屑顺序是否和目录树一致

  • 看链接

    • 每一级 URL 是否返回 200

    • 有没有多跳重定向

    • 有没有参数页替代正式页

    • 有没有把 /category//collection/ 混着用

检查完字段,下一步要看层级是不是“站点真实层级”,不是编辑习惯里的目录。一个产品页可能同时挂在 2 个集合里,一个文章页可能同时属于 3 个 taxonomy。前端为了用户浏览,会显示其中 1 条路径;模板为了偷懒,可能抓最近一次分类关系输出。结果同一页面今天显示 3 级,明天显示 4 级,或者桌面端和移动端不一致。

这也是为什么“测试工具通过”不能说明字段和层级没问题。Rich Results Test 主要检查结构化数据能否生成受支持的结果,也能做预览;它不会替你判断站点 taxonomy 是否合理,不会判断产品页到底该挂在 Men > Running 还是 Sale > Running。代码层面合格,只说明解析没报错;站点关系有没有持续、单一、可重复,还得回到页面本身核对。

给一个很短的判断标准:3 级路径里,至少要同时满足 3 件事——页面上能看到同样的 3 级名称,JSON-LD 里有 3 个连续 position,3 个 URL 都是当前站点里可访问的正式页。缺了其中 1 项,搜索系统就有理由不按你写的那条链来展示。

网站层级结构不清晰

网站层级一乱,最的结果是“找不到上一级、看不懂自己在哪、回不到相关页”。Google 说明面包屑表示页面在站内层级中的位置;URL 也应尽量简单、可理解;内部链接会影响抓取与相关性理解。若同一页面挂在 2 到 4 条路径下,URL、导航、结构化数据三套信息又不一致,Google 往往更难稳定显示 Breadcrumbs。

对照整站信息

很多页面已经写了 BreadcrumbList,Rich Results Test 也能过,但搜索结果里还是不显示,或显示得不稳定。原因往往不在那一段代码本身,而在整站给出的层级信号互相冲突。Google 对 breadcrumb 的说明写得很明确:它表示页面在站点层级中的位置,用户可以沿着路径一层层回到上级页面。代码只是其中一部分,页面可见内容、URL、内部链接、分类页关系,也都在传递同一件事。

Google 对结构化数据的说明也很清楚:标记用于帮助搜索引擎理解页面内容,前台可见内容要和标记保持一致。页面上写 Home > Blog > Technical SEO,JSON-LD 却写 Home > Resources > Search,前台是一套,标记是另一套,搜索引擎拿到的是两份不同的层级说明。就算语法 100% 正确,展示也未必稳定。

“A breadcrumb trail on a page indicates the page’s position in the site hierarchy.” Google 这句话很短,但它讲的是 site hierarchy,不是单独一段脚本。

先看最常见的冲突来源。一个商品页可能同时出现在 LaptopsNew ArrivalsStudent DealsSpring Sale 4 个列表里;一个文档页可能同时挂在 DocsHelp CenterAdmin 3 个入口下。入口可以有多个,父级不适合跟着变。用户从不同入口进入同一页,如果每次看到的面包屑都不同,页面归属就会反复变化,搜索引擎也更难判断哪条路径才是主路径。Google 文档提供过多条 breadcrumb trail 的示例,但前提是真实、可见、合乎页面关系,不是为了补代码而随意拼接。

再往下看,URL 也是站点级信号。Google 在 URL 结构文档里建议站点使用简单、描述性、便于人理解的 URL。页面如果属于 guides/technical-seo/,URL 却长期留在 /resources/item?id=4839,用户靠 URL 很难判断它在哪一层,搜索引擎也拿不到清晰目录关系。模板、导航、URL 三处只要有 2 处不一致,页面位置感就会变弱。

内部链接也会继续放大这个问题。Google 说明,链接既用于发现页面,也作为相关性信号。站内若有 60% 的入口把某页当教程,另外 40% 又把它当案例,锚文本、上下文、父级页关系会被混合表达。页面本来只该有 1 条主路径,结果在站内被讲成 2 到 3 种身份。这样一来,Breadcrumb 代码即使完全正确,也是在补救已经分叉的站点信息。

可以把 Google 会对照的信号压成一张表,方便排查:

信号位置 Google 能读到什么 常见不一致 对显示的影响
可见面包屑 当前页父子关系 前台和 JSON-LD 不同 路径可信度下降
URL 目录层级 URL 很浅,导航很深 站点结构变松
内部链接 页面归属与相关性 同页被不同栏目反复链接 主路径不稳定
分类页/集合页 上一级是否真实存在 上级页很薄,只有 3 到 4 个子页 父级承接弱
主导航 站点大区划分 导航叫法与栏目叫法不统一 用户和爬虫都要多判断一次

表里每一行都不是额外装饰,而是页面位置的一个证词。5 行里如果有 3 行对不上,搜索引擎看到的是冲突,不是层级。

很多团队会先修 schema,再去看站点结构,顺序往往反了。更稳一点的做法,是先检查页面有没有固定主归属,再决定怎么写 BreadcrumbList。可以按下面 2 组看:

  • 页面级检查

    • 单页是否只有 1 个主父级

    • 点上一级后是否能看到 5 个以上同类子页

    • 当前页标题、URL、面包屑是否讲同一套关系

    • 页面是否被多个一级栏目同时当作直属子页

  • 站点级检查

    • 并列栏目名是否边界清楚

    • 同类模板是否统一输出路径

    • 旧目录迁移后是否残留旧 URL、旧面包屑、旧链接

    • XML sitemap、导航、正文链接是否都把页面指向同一类集合页

只看代码时,看不到第 2 组问题;而 Google 在抓取和理解页面时,会同时碰到第 1 组和第 2 组。

有一个很常见的站点现象:前台面包屑写得漂亮,但上一级页没有浏览价值。比如 Home > Blog > SEO > Canonical Tags,点回 SEO 后,页面里只有 4 篇旧文章,没有筛选、没有分页、没有相关文章。用户会把这一级当成空壳页,搜索引擎也很难把它当成稳定的父级集合页。父级页如果不存在真实内容承接,面包屑路径就少了一层站内证据。

这类问题在大站里更容易出现,尤其是经历过 2 次以上内容迁移的站。一次改版把 Blog 改成 Learn,下一次又把 Learn 拆成 GuidesInsights,旧文章 URL 没完全迁,模板也没统一,正文里还有旧锚文本。结果是一页内容会同时留下 3 个时期的归属线索。用户只会觉得“这个页面像被搬过几次”,搜索引擎读到的则是历史目录残留。

可以用 30 页抽样法快速找问题。抽 30 个深层页面,记录 6 项:URL、可见面包屑、JSON-LD、主导航归属、正文内部链接来源、上一级页内容数量。若有 8 页以上出现 2 项不一致,站点层级信号已经偏散;若有 5 页以上出现 3 项不一致,先收拢站点结构,比继续补代码更有用。30 页的样本不大,但足以看出模板是否统一。

移动端还要多看一次。Google 在 2025 年 1 月开始让移动搜索结果普遍不再显示 URL 的 breadcrumb 路径,只显示域名;桌面端仍可能显示层级路径。手机结果页少了一层外部位置提示,站内自己的路径就更要清楚。如果移动模板又把面包屑隐藏,用户从搜索结果进入深层页后,位置感几乎全部依赖页头和内容上下文。

下面这组情况最容易让人误以为“代码有问题”,其实是站点信息没对齐:

  • Rich Results Test 通过,但 SERP 不稳定

    • 常见原因:前台与 JSON-LD 不一致

    • 或者父级页本身没有清楚的栏目承接

  • 面包屑偶尔显示、偶尔不显示

    • 常见原因:同一模板下页面父级关系不固定

    • 内部链接把同类页分别送往两个不同集合页

  • 旧路径还在搜索结果里出现

    • 常见原因:历史 URL、历史锚文本、旧模板残留

    • 页面迁移超过 1 次时更常见

再把执行层面压缩一下,会更容易落地:

  • 优先统一 4 个位置

    • 可见面包屑

    • JSON-LD

    • URL 模式

    • 站内主入口链接

  • 优先删掉 3 类干扰

    • 只有 3 到 4 个子页的空目录

    • 与相邻栏目只有近义词差别的目录

    • 迁移后仍被大量内部链接引用的旧路径

  • 优先检查 3 类页面

    • 深层产品页

    • 文档页

    • 帮助中心页

这 3 类页面最依赖“上一级是谁”,也最容易因为模板复用和历史迁移留下路径冲突。

还有一点经常被忽略:结构化数据并不是展示承诺。Google 在结构化数据文档里写的是“helps Google understand content”与“eligible for rich results”,不是“写了就显示”。页面被标记成可理解,不等于搜索结果一定采用那条 breadcrumb。站点其他信号如果更混乱,展示就可能被抑制或改写。

所以,处理这类问题时,思路最好从“我的代码有没有错”换成“整站是不是都在讲同一条路径”。当 URL、可见面包屑、内部链接、父级页、主导航都把页面指向同一层级时,Breadcrumb 代码才是在补充说明;前面几项若各讲一套,代码再工整,也只是把冲突写得更规范。

更少的歧义

用户进入深层页面时,先看的不是代码,而是“我现在在哪、上一层是什么、再上一层会去哪”。Google 对 Breadcrumb 的定义也围绕这一点:它表示页面在站点层级中的位置,用户可以沿着路径一层层往上返回。页面如果挂在 3 条路径下,导航写一套,URL 写一套,结构化数据再写一套,用户读到的是 3 个版本的位置说明,搜索引擎读到的也是 3 个版本。

站点里常见的误区不是层级太少,而是层级标签太多、边界太近。一个内容中心里同时放 GuidesResourcesLearnInsights,内部团队能区分,外部用户往往要多花 5 到 10 秒判断差别。Nielsen Norman Group 长期把“标签是否符合用户语言”和“分类是否贴近用户分组方式”当作信息架构评估重点;用户研究里,卡片分类常用于验证栏目名是不是贴近用户理解,而不是贴近团队内部叫法。

同一个页面拥有多个父级,在零售、SaaS、文档站里都很常见。运营角度看,它可以同时放进 New ArrivalsLaptopsStudent Deals;用户角度看,这 3 个入口不是 3 个层级,而是 3 种归属。Google 文档允许多条 breadcrumb trail,但前提是路径真实、清楚、用户可见。页面若在模板层面支持多条路径,前台最好仍保留 1 条主路径,不然同一页今天从 A 进来像属于 A,明天从 B 进来又像属于 B。

可以先看一眼页面上最容易互相打架的 6 个位置:

  • 页头主导航

  • 面包屑文本

  • URL 路径

  • H1 标题里的栏目词

  • 相关推荐模块

  • JSON-LD BreadcrumbList

只要其中 2 个位置不一致,用户返回上一级时就会犹豫;到 3 个位置不一致,路径感通常已经被打散。Google 也建议 URL 采用简单、可理解、合乎逻辑的结构,给用户和搜索引擎相同的层级提示。

再往下看,歧义常常来自“中间层太薄”。不少网站把层级拉到 5 级、6 级,看上去很完整,实际上中间页只有 3 到 4 个子页,甚至只是一个过渡目录。用户点回上一层后,看到的是内容很少、筛选很弱、上下文不够的集合页,停留时间通常会很短。层级不是越多越好,页面一旦超过 4 到 5 层,阅读路径会变长,标签差异又未必足够大,理解成本就会上去。

Baymard 在电商可用性研究里给出过很有参考性的比例:20% 的桌面站点在产品页没有 breadcrumbs,移动端没有产品页 breadcrumbs 的比例达到 65%;还有 36% 的电商站点没有提供完整类目路径。用户若从外部搜索结果、广告、邮件或社交平台落到深层产品页,没有完整路径时,很难判断页面属于哪个类目,也不容易回到同类列表继续浏览。

页面归属模糊时,最先受影响的通常不是首页流量,而是深层访问页。外部入口把用户送进 /blog/technical-seo/breadcrumb-guide,页头却突出 Resources,面包屑写成 Home > Learn > Search,相关推荐又全是 Case Studies,用户会花额外的 2 到 3 步去确认这页到底属于博客、学习中心还是案例库。每多一次判断,返回列表、继续浏览、点击相邻内容的意愿都会下降。

更稳妥的做法,是让每类页面只保留 1 条主归属路径,再允许它出现在多个入口里,但入口不等于父级。

  • 产品页:1 个主类目,2 到 3 个辅助集合页

  • 文章页:1 个主栏目,0 到 2 个专题聚合页

  • 文档页:1 个文档树路径,其他模块只做推荐入口

  • 帮助页:1 个帮助中心分类,相关问题模块不改父子关系

这样处理后,用户从任何入口进来,看到的主路径都保持一致;搜索引擎抓到的层级信号也更稳定。

栏目命名也要压缩到用户能一眼分开的范围。4 个并列栏目里,最好每个名字都能在 2 秒内说清差别。比如 DocsBlogGuidesCase Studies 的边界,通常比 ResourcesLearnInsightsKnowledge 更容易分开。后者的问题不在长度,而在语义重叠。用户做分类时,如果 8 个测试参与者里有 3 个以上把同一篇内容放进不同栏目,栏目名就需要再改。

可以按下面 3 组来排查,速度会比逐页看更快一些:

  • 页面关系

    • 单页是否有 1 个主父级

    • 面包屑是否稳定在 2 到 4 级

    • 上一级页面是否真能承接当前页

    • 当前页是否被塞进多个一级栏目

  • 命名关系

    • 并列栏目名是否一眼能分开

    • 同一词是否在导航、URL、H1 里反复变形

    • 标签是否用了团队内部术语

    • 两个栏目下的内容重合率是否超过 30%

  • 模板关系

    • 前台面包屑与 JSON-LD 是否 100% 一致

    • URL 是否跟主路径一致

    • 相关推荐模块是否把页类型带偏

    • 移动端是否删掉了完整路径

这里面,内容重合率是个很实用的细节。连续抽 50 篇文章,若有 15 篇以上可以“合理地”放进两个并列栏目,栏目边界通常已经偏模糊;若 50 个产品里有 20 个以上既像 Accessories 又像 Tools,栏目定义也需要重写。

移动端还要额外看一次。Google 从 2025 年 1 月起,在移动搜索结果里不再广泛显示 URL 面包屑路径,只保留域名展示;桌面端仍可能显示层级路径。用户在手机上从搜索结果进入页面后,外部结果页给到的位置提示变少,站内自己的路径就更要清楚。移动模板若把面包屑删掉,只留下返回箭头,用户看到的只剩“回上一页”,而不是“回上一级类目”。

做收缩时,可以优先删掉 3 类中间层:

  • 子页少于 5 个的空目录页

  • 名称和上一级只差一个近义词的目录页

  • 90 天内几乎没有独立进入量的过渡页

删完后再把保留下来的层级统一到 4 个地方:

  • 可见面包屑

  • URL

  • 站内主入口链接

  • 结构化数据

4 个位置保持同一套说法,用户读到的路径会更稳,Google 读到的层级也更连贯。结构化数据本身只是帮助搜索引擎理解页面内容,前台可见信息如果混乱,单靠标记很难长期弥补。

看一个更贴近执行的做法。抽 30 个深层页面,记录 6 项:主父级、URL、面包屑、H1、相关推荐归类、移动端显示。若其中有 9 页以上出现 2 项不一致,或有 5 页以上出现 3 项不一致,就不要再加新层级,而是先把旧路径收拢。

页面未被完全抓取或索引

你已经加了 BreadcrumbList,但 Google 先要拿到可抓取、可渲染、可索引的页面版本,才会考虑在搜索结果里用它。只要页面落在 “Discovered – currently not indexed”“Crawled – currently not indexed”,或 Google 选了别的 canonical URL,面包屑就可能不显示;站点地图提交、通过富结果测试,都不等于会被索引或展示。

Google 把页面当成什么状态

先不要看 Breadcrumb JSON-LD,也不要先看富结果测试。你先在 Search Console 的 URL Inspection 里看 4 个字段:Indexing、Page fetch、Google-selected canonical、Last crawl time。Google 官方把这组信息单独列出来,不是为了排版好看,而是因为它们对应 4 个不同环节:发现 URL、抓取页面、确定规范版本、决定是否放进索引。只要有 1 个环节没通过,面包屑就可能不出现在搜索结果里。

很多站点在这里的第一个误判,是把“Google 知道这个 URL”当成“Google 已经能稳定展示这个 URL”。两者不是一回事。Google 在抓取与索引 FAQ 里写得很清楚:抓取和索引都需要时间,而且受多种因素影响,没有保证。 这也是为什么你在站点地图里提交了 500 个 URL,48 小时后可能只有一部分进入索引,另外一部分仍停留在 “Discovered – currently not indexed”。这个状态表示 Google 已发现 URL,但还没开始有效抓取。

接着看 “Crawled – currently not indexed”。这个状态更容易让人误会,因为页面已经被抓过,看起来像“差一步就上线”。Google 对大站抓取预算的说明给了更准确的框架:不是每个被抓取的页面都会被索引;抓取后还要经过评估、合并、适合性判断。

也就是说,Google 读过你的页面,不等于它愿意把这个版本放进主索引。对面包屑来说,后果很:Google 可能读到了你的 BreadcrumbList,但页面本身没进入可用索引,SERP 里仍不会采用它。

再往下看 “Google-selected canonical”。这里经常比索引状态更有信息量。Google 关于 canonical 的文档说得非常明确:搜索结果通常会指向 canonical page;即使你自己写了 rel="canonical",Google 也可能因为内容质量、重复程度、信号不一致,选择另一个 URL。于是你检查的是 https://example.com/blog/breadcrumbs-guide/,真正被 Google 采用的却是 https://example.com/resources/breadcrumbs-guide/,或者一个带尾斜杠、参数更少、路径更短的版本。

下面这张表,适合对照 Search Console 里的状态来读,不需要再靠感觉判断:

URL Inspection / Indexing 状态 Google 当前在做什么 你最该检查的字段 面包屑常见结果
URL is on Google 页面已进入索引 Google-selected canonical、Rich results 有展示机会,但不保证采用
Discovered – currently not indexed 已发现 URL,尚未有效抓取 Sitemap、内部链接、服务器日志 基本不会显示
Crawled – currently not indexed 已抓取,未纳入索引 内容重复度、模板页占比、规范 URL 常见为不显示
Duplicate / Google chose different canonical 你的 URL 不是被采用版本 Canonical、重定向、站内链接一致性 可能显示别的路径
Excluded by noindex 页面被明确排除 robots meta、HTTP header 不会显示
Blocked by robots.txt Google 不能正常获取页面或资源 robots.txt、资源加载 页面理解不完整,通常不显示

表格里最容易被忽略的是 Rich results。URL Inspection 确实会显示富结果分析,但它只是“页面包含哪些可识别标记”的一个层面。Google 公开文档把 index statusrich results analysis 分开列出,原因很简单:前者在回答“页面能不能进 Google 的搜索系统”,后者只是在回答“标记看起来能不能被解析”。你在工具里看到 Breadcrumb 有效,只能说明语法层面没有明显问题;它不能代替 “URL is on Google”。

然后看 “Last crawl time”。这个字段不是装饰信息。假设你 3 月 1 日修了 canonical,3 月 2 日改了服务器返回码,3 月 3 日把面包屑从 JS 注入改成了服务端输出,但 URL Inspection 里显示 Last crawl time 仍停留在 2 月 25 日,那么 Google 看到的还是旧版本。Google 在“请求重新抓取”文档里写得很明白:URL Inspection 可以申请重新抓取,但 有提交配额,而且多次提交同一 URL 不会让它抓得更快

时间看完,再看 “Page fetch”。Google Search Console 文档里把它单列出来,是因为抓取成功与否不只看首页能不能打开,还看 Google 取到的是不是完整页面。这里常见的问题有 4 类:HTTP 不是 200、间歇性超时、重定向链过长、资源被阻挡。

Google 关于重定向的说明提到,301、302、meta refresh、JavaScript redirect 都会成为 canonical 信号的一部分;你以为用户和搜索引擎都到了同一页,Google 实际上可能把跳转目标当成主版本来评估。只要路径被改写,面包屑采用的也会跟着路径变。

再往前一步,站点结构也会改变你在 URL Inspection 里看到的结果。Google 在 crawling and indexing 文档里反复强调“发现内容”和“解析内容”都依赖站点如何向 Google 暴露页面。一个 5 万 URL 的目录站,如果只有站点地图提交,没有稳定的内部链接,Google 发现 URL 的速度和抓取优先级就会受影响;相反,一个只有 300 篇文章、每篇都能从栏目页和相关文章模块获得 3 到 8 个内部链接的站点,进入抓取队列通常更顺畅。

这里不用猜测算法细节,你只需要看 Search Console 里同一目录下 50 个 URL 的状态是否一致:如果 50 个里有 35 个都停在 “Discovered – currently not indexed”,问题大多不在面包屑代码,而在页面发现与抓取分配。

再补一层判断方式:不要只检查单个 URL,要抽样检查一组 URL。比较稳妥的做法,是从同一类型页面里抽 10 到 20 个,比如全是文章页,或全是产品页,记录 5 个字段:Indexing、Last crawl、User-declared canonical、Google-selected canonical、Page fetch。你会很快看出模式。若 12 个页面里有 9 个“Google-selected canonical”指向栏目页,说明 Google 并不把这批页面视为独立结果;若 15 个页面里有 11 个是 “Crawled – currently not indexed”,说明抓取已发生,但页面独特性或信号一致性不够。

还有一个常见误区,是把 sitemap 提交率当成索引率。Google FAQ 已经明确说明,提交站点地图不会保证所有 URL 被抓取或被索引。

站点地图更像“告知入口”,不是“收录命令”。如果一个站点地图含 2,000 个 URL,而 Page Indexing 里只有 620 个处于有效索引,剩下的大量 URL 仍可能处于 discovered、crawled-not-indexed、duplicate 或 excluded 状态。对 Breadcrumbs 来说,站点地图里的存在感几乎不能代替 URL Inspection 的 index verdict。你真正要看的,是 Google 现在把这页当成“可用索引页”、 “候选重复页”,还是“尚未进入索引流程的 URL”。

可以把排查顺序压缩成一列,方便照着走:

  • 先看 Indexing verdict:是不是 URL is on Google

  • 再看 Google-selected canonical:是不是你想让它排名的那个 URL。

  • 再看 Last crawl time:Google 看的是否还是旧版本。

  • 再看 Page fetch / robots / noindex:有没有访问或索引限制。

  • 最后才看 Breadcrumb 标记和页面层级是否一致

如果你是内容团队在配合开发,可以把判断门槛设得更明确一点:只有当某个 URL 同时满足 200 抓取成功、无 noindex、Google-selected canonical 为当前页、Indexing verdict 为 on Google、Last crawl 更新到改版之后,才值得继续检查面包屑展示问题。前面任意一项不满足,先修页面状态。这样排查会省很多时间,也能避免把“页面没被 Google 当成正式索引页”的问题,误判成“Breadcrumbs 代码没写好”。

Google 抓到的是哪一个版本

很多站点的问题不在“页面上有没有面包屑”,同一个 URL,浏览器里看到的是用户端完成渲染后的页面;Google 先拿到的却往往是原始 HTML,然后再决定要不要进入渲染流程。Google 的文档把抓取、渲染、索引拆成独立环节,原因很实际:HTML、渲染后 DOM、canonical、重定向、结构化数据,可能在不同阶段给出不同信号。

先看最常见的一类:页面首屏返回的是简化版 HTML,导航链和 Breadcrumb JSON-LD 由前端脚本在 1–3 秒后插入。用户刷新页面能看到完整路径,开发在浏览器 Elements 面板里也能看到,但 Google 不一定总能拿到同样结果。Google 关于 JavaScript 生成结构化数据的说明里写得很明确:可以用 JavaScript 生成结构化数据,但要注意渲染和实现方式。另一个文档又补了一句,渲染可能失败,尤其是依赖脚本重定向或后置注入时。

页面上“看得到”,不等于 Google 第一次抓取时就“拿得到”。
面包屑在浏览器里出现于第 2 秒,并不能证明 Google 在原始 HTML 阶段已经读到。

这就带出第二个问题:canonical 在渲染前后不一致。Google 近几个月更新过相关文档,写法比以前更明确:如果站点用客户端渲染,canonical 信息要尽量清楚;最好把 canonical 放在 HTML 源码里,而且不要让 JavaScript 再去改它。Google 还补充,如果没法在原始 HTML 写 canonical,那宁可只用 JavaScript 设置一次,也不要“前后两套”。

下面这张表最适合解释“你看到的版本”和“Google 采用的版本”为什么会分开:

场景 浏览器用户看到的页面 Google 可能先拿到的页面 常见后果
SSR 输出面包屑 HTML 一开始就有层级 原始 HTML 就有层级 识别更稳定
CSR 后注入面包屑 第 1–3 秒出现导航链 原始 HTML 里没有 面包屑可能不被采用
HTML canonical=A,JS 改成 B 用户看不出差别 Google 前后读到 2 个 canonical 规范版本混乱
HTML 无重定向,JS 再跳到别的 URL 用户最终到 B Google 未必总看到 B 采用 URL 不稳定
参数页和无参数页共存 用户常到带参数页 Google 可能选无参数页 SERP 显示别的路径

表里的第三行最值得注意。Google 在 canonical 文档里说过,Google 选择 canonical 时会综合多种信号;即使你显式指定了一个版本,Google 也可能因为内容质量或一致性问题选另一个。排查面包屑时,如果页面 URL、head 里的 canonical、渲染后 canonical 有 2 个以上不一致,Google 读到的站点层级很容易偏离你在前端里看到的层级。

然后要看重定向。很多站点把 URL 处理逻辑写在前端:打开 /product/blue-shoes 后,脚本再判断库存、语言或国家,随后跳去另一个地址。Google 对 JS 重定向的说明很直白:只有在不能用服务端或 meta refresh 的情况下才用 JavaScript 重定向;而且 Google 虽然会尝试渲染每个抓到的 URL,但渲染可能失败。也就是说,用户能稳定跳到目标页,不等于 Google 一定看到同样的跳转链。

如果服务端 200 返回了 A,
JavaScript 在第 800 毫秒把用户送到 B,
Google 有机会只处理 A,没有义务总是跟着脚本走到 B。

再往前一点,资源抓取也会改变 Google 读到的页面。很多人以为 robots.txt 只影响“页面能不能抓”,其实资源文件也算。假设你的面包屑 DOM 依赖 app.js,分类路径依赖 taxonomy.json,CSS 决定哪些导航节点显示,结果其中 1 个资源被 robots.txt 挡住,用户端通过缓存或别的请求路径还能显示正常,Google 却可能只拿到一半导航结构。

除了资源阻挡,还有“原始 HTML 过空”的问题。很多 JavaScript 站点初始 HTML 只有一个 div id="app",正文、分类、内链、面包屑都等脚本跑完才生成。Google 对 dynamic rendering 的文档已经说得很清楚:动态渲染只是临时替代方案,不是长期方案;更推荐 SSR、静态渲染或 hydration。这背后的原因很实际——原始 HTML 内容越少,Google 前期能用来判断页面主题、层级、重复关系的信息就越少。

可以把“版本偏差”的来源拆成一列,排查时更省时间:

  • 原始 HTML 没有面包屑,渲染后才有

  • canonical 在 HTML 和渲染后不同

  • 页面 200,但脚本再把用户送到别的 URL

  • 参数 URL、尾斜杠 URL、大小写 URL 同时存在

  • 资源被 robots.txt 或权限设置挡住

  • 站内链接指向 A,canonical 指向 B,sitemap 提交 C

你会发现,这里面不少问题和面包屑代码本身没关系,而是页面“版本管理”没统一。Google 的 Breadcrumb 文档里说,Breadcrumb 表示页面在站点层级中的位置;前提是 Google 先确认“这页是哪一页、属于哪个规范版本、路径是不是稳定”。如果它看到的是参数页、重定向前的页、渲染失败的页,或者重复集中里被降为副本的页,最后在 SERP 里展示的路径就很可能不是你写在 JSON-LD 里的那条。

再举一个更贴近实操的例子。某个博客文章有 4 个可访问地址:

版本 是否返回 200 是否有 canonical 页面是否含 BreadcrumbList
/blog/breadcrumbs-guide 指向自己
/blog/breadcrumbs-guide/ 指向无斜杠版
/resources/breadcrumbs-guide 指向自己
/blog/breadcrumbs-guide?ref=nav 指向无参数版

对用户来说,4 个地址大多都能正常看文。对 Google 来说,这 4 个地址会形成一组重复页面,需要先选 1 个 canonical。Google 文档已经说明,canonicalization 是“从一组重复页里选代表页”的过程。既然是“先选代表页”,面包屑显示当然也会围绕代表页展开,不会围绕每个重复版本分别展示。

一组重复页里,用户点开任意 1 个都能读内容。
Google 在索引里只想记住 1 个版本。
你在别的副本页上写得再完整,也不保证会被拿来当 SERP 展示依据。

还有一个容易被忽略的点:Search Console 里看“URL is on Google”,也不表示 Google 用的是你刚改完的版本。Google 关于 recrawl 的文档写过,URL Inspection 可以请求重新抓取,但适合“少量 URL”;站点级更新更适合 sitemap。也就是说,你今天改了面包屑层级、明天又改了 canonical,再隔一天改了 JS 渲染逻辑,Google 可能还在按 3 天前抓到的版本评估页面。

只要 Last crawl time 没更新,Google 读到的内容仍可能不是你现在浏览器里看到的页面。排这类问题时,最实用的做法不是反复刷新富结果测试,而是把同一 URL 的 3 个版本并排比:

  1. 浏览器里用户看到的最终页面

  2. View Source 里的原始 HTML

  3. URL Inspection 显示的 canonical 与抓取时间

如果第 1 和第 2 已经不同,再去看第 3;如果第 2 和第 3 对不上,Google 采用的又会是另一套。面包屑显示问题往往就藏在这三层差异里。Google 文档没有把它叫成复杂概念,写法一直很务实:抓取、渲染、canonical、结构化数据,各自独立,但会互相影响。

把判断标准写得窄一点会更有用。只有当页面同时满足下面 5 条,才适合继续追 Breadcrumbs 展示问题:

  • 原始 HTML 已含稳定 canonical

  • 原始 HTML 或稳定渲染后可见面包屑

  • 没有靠 JS 才能完成的重定向

  • 参数页、斜杠页、栏目别名页没有同时竞争

  • Google 采用的 canonical 与你要推的 URL 相同

怎么把这类问题排出来

先按顺序排,不要一上来就看 Breadcrumbs 代码。你先在 Search Console 里抽 10–20 个同类型 URL,只看 5 个字段:Indexing verdictPage fetchLast crawl timeUser-declared canonicalGoogle-selected canonical。Google 的 URL Inspection 数据结构本来就是按这几个字段拆开的,说明它们分别对应索引、抓取、时间和规范版本,不是一个总开关。

如果 15 个文章页里有 9 个显示 Crawled - currently not indexed,先不要查面包屑层级。
如果 12 个产品页里有 7 个 Google-selected canonical 不是当前 URL,先不要查 JSON-LD。

第一轮排查只做分类,不改页面。把 URL 按状态分成 4 组:URL is on GoogleDiscovered - currently not indexedCrawled - currently not indexedDuplicate / Google chose different canonical。Google 官方 FAQ 写得很清楚:站点地图、发布新页面、提交请求,都不保证何时抓取或何时索引,所以先把状态分布看清,比单页猜原因更有效。

可以按下面这张表登记,5 分钟就能看出模式:

抽样数量 on Google Discovered Crawled not indexed Google chose different canonical
10 个文章页 4 2 3 1
10 个产品页 3 1 2 4
10 个分类页 7 0 1 2

如果某一类页面里 30% 以上都落在同一个异常状态,后面就按这一类状态查,不要把 4 类问题混在一起。这里看的是分布,不是单页例外。

接下来先看 Last crawl time。这个字段很容易被跳过,但它决定了 Google 看到的是旧版本还是新版本。假设你在 3 月 10 日改了 canonical,又在 3 月 11 日把面包屑从 JS 注入改成服务端输出,而 URL Inspection 显示最后抓取时间还是 3 月 4 日,那 Google 处理的还是旧页面。Google 关于重新抓取的说明里也写了,提交重新抓取请求只有少量 URL 适用,而且多次提交不会让抓取变快

页面代码改了 2 次,但 Last crawl time 没变,先别讨论“为什么还不显示”。
Google 没重新看到页面,Search 里的表现就不会跟着你的本地页面同步。

然后看 Page fetch。这里只分两种理解方式:抓到了完整页面,或者没抓到完整页面。问题通常不只是一句“页面能打开”。用户浏览器能开,不等于 Google 抓到的是同一个版本。你要检查的是:HTTP 返回码是不是 200,有没有先经过 301/302,有没有 meta refresh,资源是否被 robots.txt 挡住。

下面这列可以交给开发或运维核对:

  • HTML 返回码:200

  • 非规范 URL 到规范 URL:1 次 301

  • 不要长期保留多次跳转:例如 http -> www -> https -> slash

  • robots.txt 不要挡住面包屑依赖的 CSS/JS

  • 页面不要在客户端再改 canonical

  • 不要把同一内容挂在 2 个以上稳定可访问 URL 上

再往下看 canonical。这里不要只盯着 User-declared canonical,更要看 Google-selected canonical。Google 文档写得非常白:即使你声明了 canonical,Google 还是可能因为内容质量、重复程度、信号不一致,选另一个版本。排查时,至少要对照 3 组 URL:页面地址、声明的 canonical、Google 采用的 canonical。只要三者里有两者不同,Breadcrumbs 展示路径就可能跟你页面里的层级不一致。

你检查到的情况 处理顺序
页面 URL = 用户声明 canonical ≠ Google 采用 canonical 先查重复内容、内部链接、跳转链
页面 URL ≠ 用户声明 canonical = Google 采用 canonical 看是不是你自己把当前页设成了副本页
页面 URL = 用户声明 canonical = Google 采用 canonical 再往下查抓取完整性和索引状态

如果出现“Google chose different canonical”,不要只改标签。先查站内链接。Google 关于重复 URL 的文档里提到,站内链接本身就是规范信号之一。一个页面如果在菜单里链接到 A,在正文里链接到 B,在 sitemap 里提交 C,Google 没理由只相信你 head 里的那一个 canonical。排查时,把同一模板里的链接统一到 1 个版本,效果通常比单改标签更稳定。

canonical 标签像“声明”;站内链接、跳转、sitemap、HTTPS 版本更像“持续重复出现的信号”。
当 4 类信号互相打架,Google 会自己选版本。

接着回头看 Discovered - currently not indexed。这一类页面,很多时候不是“质量差”,而是发现了 URL,但抓取还没排到,或者站内信号太弱。Google FAQ 里没有给固定天数承诺,也没有说提交 sitemap 后几小时一定处理。实操里要查 3 件事:这个 URL 是否在 sitemap 里、是否有至少 2–3 个内部链接指向它、是否和一大批参数页一起涌入。新页面数量如果一次增加 数百或数千,Google 抓取排队变慢很常见。

排这一类时,别先改正文,先看入口:

  • 是否出现在 XML sitemap

  • sitemap 的 lastmod 是否更新

  • 页面是否能从栏目页、相关文章、站内搜索结果被发现

  • 是否存在 ?sort=?ref=?color= 一类参数页把抓取队列挤满

  • 新页面是否只存在于后台或孤立落地页,没有内链入口

再看 Crawled - currently not indexed。这一类比 discovered 更麻烦,因为 Google 已经读过页面,却没放进索引。这里排查不要停在“内容不够好”这种模糊说法,要看页面类型是否高度模板化。比如 20 个产品页,正文都只有 80–120 个词,规格表相同度超过 70%,唯一变化只是颜色或尺寸,Google 很容易把它们当成低差异页面。即使 BreadcrumbList 完整,页面本身也不一定进入主索引。

这里建议做一个很简单的核对表,不需要上复杂工具:

检查项 低风险状态 高风险状态
主体文字量 300 词以上且页面间差异明显 100 词左右,模板重复高
可索引 URL 数 每个主题 1 个主 URL 同主题 3–5 个变体 URL 同时可索引
内链锚文本 稳定指向规范页 同主题锚文本乱指多版本
页面意图 单一、清楚 目录页、筛选页、标签页混在一起

走到这里,才轮到 Breadcrumbs 本身。排法也不要复杂化,只做 3 组对照:页面可见导航、HTML/渲染后源码里的 Breadcrumb 标记、Google 最终采用的 canonical URL。三者只要不一致,搜索结果里就可能不用你给的层级。Google 关于 Breadcrumb 结构化数据的文档说的是“帮助 Google 理解页面在站点层级中的位置”,不是“写了就必须展示”。

页面可见导航写的是 Home > Blog > SEO
JSON-LD 写的是 Home > Resources > Technical SEO
Google 采用的 canonical 却是 /guides/seo/...
这种组合,SERP 里路径不稳定很常见。

把排查结果写成一页表,不要只停留在口头判断。每个 URL 记录 8 项已经够用:页面类型、状态、最后抓取时间、声明 canonical、Google canonical、返回码、内链数量、面包屑是否一致。你抽 20 个 URL,半小时内通常就能看出问题集中在哪一列。只要能看出列上的集中分布,处理顺序就会很清楚:先修索引状态,再修 canonical,再修抓取完整性,最后才看 Breadcrumbs 标记。

滚动至顶部