如果图标在 Chrome 中显示正常,到了 Yandex 却不出现,或者 Yandex Search 的某条结果没有图标,你可能面对的是两套彼此独立的系统。favicon 在 Yandex 中不显示,可能是 Yandex Browser 无法加载图片,也可能是 Yandex Search 尚未刷新已收录页面的图标。

快速修复:favicon 在 Yandex 中不显示

先判断图标究竟在哪里缺失:标签页、地址栏、书签,还是搜索结果。浏览器和搜索结果的刷新路径不同,所以标签页显示正常,并不能证明搜索结果条目已经是最新的。

  1. 找到声明。查看页面源代码,搜索 rel 中包含 icon 的 link 元素。如果不存在,就在文档的 head 中添加一个。
  2. 测试准确的文件 URL。在新标签页中打开 href 的值。它必须直接返回图片本身,而不是 404 页面、登录界面或 HTML 错误文档。
  3. 使用 root-relative 备用路径。将有效的 ICO 文件放在 /favicon.ico,并明确引用这个路径。这样可以消除嵌套页面上的路由歧义。
  4. 绕开旧缓存副本。关闭标签页,在禁用缓存的情况下重新加载,然后再次打开页面。临时使用类似 /favicon.ico?v=2 的值,可以确认缓存是否导致了不一致。
  5. 单独刷新搜索结果。如果直接访问文件正常,但 Yandex Search 仍然没有图标,请确认页面是否已按预期 URL 收录。如果你使用 Yandex Webmaster,应提交修正后的 URL 以申请重新索引,而不是反复更换图标。

第一轮排查时,一段简单、可预期的声明就足够了:

<link rel='icon' href='/favicon.ico'>

如果你的支持方案包含 SVG,也可以添加一个 SVG 候选项:

<link rel='icon' type='image/svg+xml' href='/favicon.svg'>

HTML 标准定义了指向外部资源的 icon 链接关系,以及该关系可选的 sizes 属性。如果声明了尺寸,请确保它们与实际提供的文件一致。

仅在 Yandex 中出现故障的根本原因

1. 路径看起来正确,实际却解析到了别处

相对路径形式的 icon URL 会以页面的 base URL 为基准解析。在 https://example.com/products/item/ 上,href='favicon.ico' 最终可能指向当前路径下,而不是站点根目录。添加 base 元素或使用框架生成的 URL,也可能改变解析结果。

打开 Network 面板,筛选 icon 请求并检查它的最终 URL。/products/item/favicon.ico 和 /favicon.ico 是两个不同的资源,即使它们在项目目录树中的名字看起来很熟悉。

2. 服务器没有返回图片

build 目录中存在的文件,部署到线上后仍可能无法正常加载。需要检查部署是否过期、文件名大小写是否不匹配、CDN 路径是否被拦截,以及是否存在重定向循环或身份验证规则。

查看响应的状态码、最终 URL 和 content type。ICO 需要使用 icon media type,SVG 和 PNG 则需要各自匹配的 image type。如果响应正文是 HTML,说明浏览器收到的是错误页面,而不是图标。

3. 搜索结果与浏览器标签页使用的状态不同

浏览器标签页会从当前访问的页面加载 icon;Yandex Search 中的结果可能仍采用此前爬取时获取的信息。因此,实时标签页中的图标可能显示正常,而搜索结果里没有图标,或者仍显示旧图标。

先检查搜索结果指向的目标 URL。如果它指向旧 URL、staging 页面、重定向地址或其他被索引的版本,只修改当前页面可能无法修复该条结果。应确保 icon 可以公开访问且地址稳定,然后通过可用的 webmaster tools 申请刷新。

4. 缓存或重复链接掩盖了正确的文件

Yandex Browser 可能保留已经获取过的 icon,服务器或 CDN 也可能仍在提供旧部署中的文件。像 /favicon-v2.ico 这样的带版本文件名可以暴露过时的请求路径,前提是同时更新 HTML 中的 link。

还要检查每一个被注入的 icon link。CMS 主题、插件或模板可能额外添加一条 rel='icon' 声明,从而留下两个路径不同的候选项。应移除意外产生的重复声明,而不是依赖浏览器的选择顺序。

预防:让 icon 的定位更可预测

最后检查

如果直接请求失败,先修复图标的交付问题,再排查 Yandex。如果请求成功、但搜索结果仍然不对,就检查已收录的 URL,并处理 recrawl 路径。这个拆分通常能把一个模糊的 favicon 问题,变成两个可以逐项完成的检查。

如果需要一份更全面的浏览器端排查清单,请参阅Favicon 不显示?7 个原因与快速修复。如果你在比较不同搜索引擎,Google 采用的是另一套规则;请查看Google favicon 检查清单,不要假设 Yandex 使用相同的准入规则。

你可以先用Mzu favicondl 准备一个干净的 ICO 或 PNG fallback,再发布到根路径。关键细节在于最终 URL、响应,以及 Yandex 能够使用的 refresh 路径。