资讯文章 资讯 · NEWS
条目图标到底该自己存还是直引对方 favicon:抓取、隐私、失效和降级这四件事
2026-10-23 约 1,474 字 预计阅读 4 分钟 yiyunkj
条
目录站每个条目前面那个小图标,看着是最不起眼的元素,实际上牵扯四件事:抓取、隐私、失效、降级。做法选错了,轻则页面上出现一片灰色占位,重则把自己的用户访问行为泄露给一万个陌生域名。
![]()
图片来源:网络,版权归原作者所有,侵权请联系删除
两条路的差别
| 维度 | 直引对方地址 | 自托管 |
|---|---|---|
| 实现成本 | 零,拼 URL 就行 | 需要抓取、存储、更新流程 |
| 用户隐私 | 用户 IP 暴露给对方站 | 只请求自己的域名 |
| 失效表现 | 破图或空白 | 可降级到默认图标 |
| 加载性能 | 几十个不同域名,DNS 各一次 | 同域,可合并到 CDN |
| 对方改版 | 图标变了或 404 | 保留旧版,可控 |
直引的最大问题不是失效,是隐私和性能。一个列表页 20 个条目,就是 20 个跨域请求,每个都要做一次 DNS 解析和 TLS 握手,用户的 IP 和访问时间也同时暴露给这 20 个站点。对方站如果有日志分析,就能知道有人从你的目录站点了过来。
性能那一栏也别小看。移动端弱网环境下,20 个跨域图标请求能把首屏拖慢一秒以上。
自托管的抓取流程
搭一套图标抓取不难,但有五个环节要处理:
- 发现:先请求对方首页,从 HTML 里解析
<link rel="icon">系列标签,拿不到再回退到/favicon.ico。别只试后者,很多站已经不用它了。 - 格式:拿到可能是 ICO、PNG、SVG 甚至 WebP。统一转成一个格式存,推荐 PNG,尺寸归一化到 64×64。
- 超时:单次请求超时设 3 到 5 秒,失败就落到默认图标,不要重试三次。抓取是后台任务,失败下次再来。
- 并发:批量抓的时候限制并发,别一次对同一个域名打出几十个请求,那跟打人家的服务器没区别。
- 更新:图标不常变,半年重抓一次足够。条目新收录时抓一次,之后进半年一轮的队列。
声明自己的身份这件事前面写过,这里只强调一点:抓取脚本要有明确的 User-Agent,里面带上站名和联系方式。这是礼貌抓取器的基本配置。
降级图标怎么设计
抓不到的时候显示什么,比能不能抓到更影响观感。三种降级策略,按优先级:
一级降级用站点首字母。取域名的主域第一个字符,生成一个纯色底加白字的图标,颜色由域名哈希决定,这样同一个站每次生成的颜色一致。这个方案不需要任何外部资源,永远不会失败。
二级降级用一个通用的灰色占位图标。缺点是页面上出现一堆同样的灰色块,视觉上很差,只在一级降级也失败时用。
三级是干脆不显示图标,条目卡片改用纯文字排版。这是最保守的方案,适合图标抓取系统整体不可用时临时切换。
首字母方案的实现成本最低,效果也最好,值得优先做。它还能顺便解决新收录条目的空窗期——图标还在抓取队列里的时候,先显示首字母图标,抓到了再替换。
官方对站点图标的要求
谷歌官方文档里对搜索结果中显示的站点图标有一套具体要求,虽然是讲自己站的图标,但对目录站做图标处理也有参考价值:
图标必须是正方形(1:1),最小 8×8 像素,建议使用大于 48×48 的尺寸;URL 要稳定,不要频繁更换;图标文件和首页都必须允许 Googlebot 和 Googlebot-Image 抓取;每个主机名只支持一个图标;不当内容会被替换成默认图标。
其中「URL 要稳定」这一条对目录站是反向提醒:如果你把对方图标存到了自己域名下,那这个 URL 就是你自己的,稳定性由你保证。这反而是自托管的又一个好处。
关于跨域引用的一句补充
图标文件的 URL 不一定要托管在同源站点上,官方明确说过可以放在 CDN 上。所以自托管也不意味着必须存在自己服务器磁盘里,丢到对象存储加 CDN 反而是更合理的做法,成本也更低。
最后一点:条目图标上不要加懒加载。loading="lazy" 用在正文配图上是对的,用在 16×16 的小图标上是纯开销,也不会带来任何带宽节省。