图片SEO优化完整指南:alt+WebP+懒加载实战
保哥这两年帮人做技术 SEO 评估时,发现图片这一块的优化质量普遍很低。绝大多数中文站点把 alt 属性堆满关键词、把 jpg 上传完事,至于现代浏览器普及的 WebP/AVIF、loading 懒加载、srcset 响应式、Image Sitemap、ImageObject 结构化数据这些手段,要么没听过,要么听过没落地。本文把图片 SEO 整条链路从命名、压缩、格式、属性、加载策略、结构化数据、CDN 到搜索引擎收录跟踪一次写清楚,附上我自己在 zhangwenbao.com 上跑的实测数据。
图片 SEO 真正的三个目标
很多教程一上来就讲细节,但不告诉你"做这件事到底想达到什么"。图片 SEO 的目标其实只有三个:
- 让 Google 图片搜索(Image Search)收录你的图片并带来流量。Google 图片搜索每天产生几亿次点击,对电商和媒体站是不可忽视的流量入口。
- 让正常网页搜索的搜索结果里附带你的图片缩略图,提升点击率(CTR)。
- 不要让图片拖慢页面加载速度,避免图片导致的 Core Web Vitals 评分下降反过来压低排名。
这三个目标对应不同的优化手段。alt 和文件名主要为目标 1,缩略图和结构化数据主要为目标 2,懒加载和压缩主要为目标 3。下面分块展开。
文件名:搜索引擎的第一道线索
很多人上传图片时直接用相机自动生成的 IMG_20251019_142537.jpg 或者 image-001.png。Google 图片搜索的索引算法第一步就是看文件名,文件名里的语义就是图片的主题词。正确做法:
- 用英文小写连字符分隔,比如
iphone-15-pro-titanium-blue.jpg。 - 避开拼音 + 中文混杂,
iphone15pro钛蓝色.jpg在某些 CDN 上传时会被 URL 编码。 - 长度控制在 50 字符以内,过长的文件名会被搜索结果截断。
- 不要塞关键词三次,
seo-seo-seo-tips.jpg反而被识别为垃圾。 - 跟图片实际内容相关。如果图片是手机壳,就叫
iphone-case-clear.jpg,不要写无关词。
WordPress 上传图片时会自动用文件名作为 alt 的兜底值,所以好的文件名等于赠送一个像样的 alt。批量改名工具用 Bulk Rename Utility(Windows)或 ImageMagick(Linux 服务器)。
alt 属性:不是关键词堆砌的地方
alt 属性的本意是给屏幕阅读器念出来的"图片描述",让视障用户知道图上是什么。Google 在 SEO 文档里反复强调:"alt 应该写得像你给电话另一头看不到屏幕的朋友描述图片一样自然"。错误示范:
<img src="iphone.jpg" alt="iphone iphone15 iphone15pro 苹果手机 钛蓝色 128GB 256GB 512GB">
正确示范:
<img src="iphone-15-pro-titanium-blue-front.jpg" alt="iPhone 15 Pro 钛蓝色款式正面图,显示 6.1 寸超视网膜 XDR 屏幕">
区别在哪?前者堆砌关键词、读起来像广告,搜索引擎反垃圾算法直接把这种当作低质量信号;后者描述自然、含核心关键词、对屏幕阅读器友好。
Google 官方给的 alt 写作清单:
- 描述图片实际内容,不是图片旁边的标题。
- 包含 1~2 个相关关键词,自然嵌入语境,不要堆砌。
- 长度 8~15 个中文字或 60~125 字符。
- 装饰性图片(比如分隔线、纯背景)alt 设空字符串
alt="",让屏幕阅读器跳过。 - 同一页面上多张图片不要用相同的 alt。
WordPress 用户在媒体库的"替代文本"框里直接填,每次插入图片都填一下,养成习惯。
图片格式:何时用 WebP,何时保留 JPEG/PNG
2025 年的浏览器格局,AVIF 和 WebP 已经成为主流,按支持率:
- WebP:Chrome、Firefox、Safari、Edge 全部支持,覆盖率 97%+。Safari 14+(2020 年发布)开始原生支持。
- AVIF:覆盖率 92%+,压缩效率比 WebP 再高 30%。Safari 16+ 才支持,所以面向中老年用户多的站点要谨慎。
- JPEG:兼容性最好,照片类图片传统选择。
- PNG:透明背景、图标、文字截图首选。
- SVG:纯矢量图首选,logo、图标用它最合适。
- GIF:除了短动画其他场景已被淘汰。
实战推荐策略:
- 所有照片类图片转 WebP 上传,质量 75~80。同等观感下文件大小是 JPEG 的 50~70%。
- 需要透明背景的图标转 WebP(带 alpha 通道)或 PNG。
- logo 和简单图标用 SVG。
- 对支持率有疑虑的,用
<picture>标签做格式回退:
<picture>
<source srcset="hero.avif" type="image/avif">
<source srcset="hero.webp" type="image/webp">
<img src="hero.jpg" alt="保哥的工作桌面照片">
</picture>
浏览器会按顺序匹配第一个支持的格式。这种写法兼顾压缩率和兼容性。
压缩工具与质量取舍
未压缩的相机照片动辄 5~10MB,直接上传到网页是灾难。我自己用的工具链:
- 批量压缩:Squoosh.app(Google 出品,浏览器里用,免费)。
- 命令行批处理:cwebp / avifenc,配合 shell 脚本批量转格式。
- WordPress 插件:ShortPixel 或 Smush,自动压缩上传图片。
- 设计稿快速导出:TinyPNG、Compressor.io,浏览器拖拽即可。
质量参数怎么定?我自己的标准:
- WebP/JPEG 质量 80:肉眼几乎看不出和原图差别,文件大小约为原图 30%。这是默认值。
- WebP 质量 70:仔细看能看出有压缩痕迹但日常浏览察觉不到,文件大小是原图 20%。流量大的电商商品列表图用这个。
- WebP 质量 90+:文章封面、需要放大查看的图用这个。
压缩到什么文件大小算够?经验值:内容图(文章里的配图)控制在 100KB 以内;首屏 hero 图控制在 200KB 以内;缩略图控制在 30KB 以内。超过这个体积考虑再压一压。
响应式图片 srcset 与 sizes
同一张图片在桌面和手机上需要不同的尺寸——给手机送 1920px 宽的大图既浪费流量又耽误首屏渲染。HTML5 的 srcset 解决这个:
<img
src="hero-1200.webp"
srcset="hero-400.webp 400w,
hero-800.webp 800w,
hero-1200.webp 1200w,
hero-1920.webp 1920w"
sizes="(max-width: 600px) 100vw,
(max-width: 1200px) 80vw,
1200px"
alt="保哥工作桌面图"
loading="lazy"
decoding="async"
width="1200" height="800">
浏览器会根据屏幕宽度选择 srcset 里最合适的版本。一张 hero 图准备 4 个尺寸(400/800/1200/1920)几乎覆盖所有设备。WordPress 5.5+ 已经自动给媒体库图片生成 srcset,但生成的尺寸可能不符合你的设计断点,主题里可以用 add_image_size() 自定义。
懒加载 loading="lazy"
原生懒加载是 2020 年开始所有主流浏览器都支持的属性。在 img 上加 loading="lazy",浏览器会等图片即将进入视口时才发请求。这是图片性能优化里 ROI 最高的一招。
注意几点:
- 首屏(above-the-fold)的图片不要加 lazy,否则会延迟 LCP。
- 视口外的图片全部加 lazy。WordPress 6.3+ 自动做这件事。
- 不要给所有图片都加
decoding="async"——首屏图用 sync 让浏览器优先解码。
尺寸属性 width/height 防 CLS
img 标签必须带 width 和 height 属性,浏览器才能在图片加载完之前预留出空间,避免布局突变(CLS)。这是 Core Web Vitals 三个核心指标之一,CLS > 0.1 会被 Google 评为差。
<img src="hero.webp" width="1200" height="800" alt="...">
注意 width/height 是 HTML 属性而不是 CSS。配合 CSS img { max-width: 100%; height: auto; } 让图片在小屏自适应,宽高比保持不变。
Image Sitemap 与 ImageObject 结构化数据
这两个动作是让 Google 图片搜索"知道"你站点上有哪些图片。
Image Sitemap
把站点上所有有 SEO 价值的图片列在专门的 sitemap-images.xml 里,提交到 Search Console。格式:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://example.com/posts/iphone-15-review</loc>
<image:image>
<image:loc>https://example.com/img/iphone-15-front.webp</image:loc>
<image:caption>iPhone 15 Pro 正面图</image:caption>
<image:title>iPhone 15 Pro 钛蓝色</image:title>
</image:image>
</url>
</urlset>
WordPress 用 RankMath 或 Yoast 都能自动生成图片 sitemap。
ImageObject 结构化数据
在文章页面的 head 里嵌一段 JSON-LD:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ImageObject",
"contentUrl": "https://example.com/img/iphone-15-front.webp",
"name": "iPhone 15 Pro 钛蓝色正面",
"description": "苹果发布会上展示的 iPhone 15 Pro 钛蓝色款式正面照",
"creator": {"@type": "Organization", "name": "保哥笔记"},
"license": "https://creativecommons.org/licenses/by/4.0/"
}
</script>
带 license 字段的图片会在 Google 图片搜索结果里显示"可授权使用"标签,点击率明显高。
水印的取舍
很多原创站怕图片被盗用,习惯打大水印。SEO 角度的现实:
- 大水印会让 Google 图片搜索的 CTR 下降,因为缩略图被破坏。
- 小水印(右下角半透明)影响很小,可以接受。
- 真正想防盗用,靠 hotlink protection(nginx referer 拦截)+ EXIF 嵌入版权信息更有效。
我自己 zhangwenbao.com 的图片只在右下角打 30% 透明度的小标,完全不影响 Google 图片搜索流量。
CDN 与图片处理服务
对于流量较大的站点,把图片放到专门的图片 CDN 能省一半带宽费用。常用方案:
- Cloudflare Images:上传一次,按需自动生成多尺寸 + WebP/AVIF,URL 上加参数控制
?width=600&format=webp。 - imgix:功能最强但贵,适合电商站。
- 七牛云、又拍云:国内站点首选,附带图片处理参数。
- 七牛云的格式参数:
?imageMogr2/format/webp/quality/80/thumbnail/600x。
用 CDN 之后图片 URL 通常带域名前缀,记得在 Image Sitemap 里写 CDN 域名而不是源站域名。
实测数据:图片优化对 Core Web Vitals 的影响
保哥在 zhangwenbao.com 做的 A/B 测试,2025 年初统计:
- 改造前:图片直接上传 JPEG,无懒加载,无 srcset。LCP 中位数 2.8s,CLS 0.13。
- 第一阶段(转 WebP + 懒加载):LCP 2.1s,CLS 0.13。LCP 改善明显,CLS 没变。
- 第二阶段(加 width/height + srcset):LCP 1.6s,CLS 0.04。三项 Core Web Vitals 全部进入"好"区间。
- 同期排名:top 10 关键词数从 142 涨到 198。
图片优化对页面速度评分的影响是直接且巨大的。任何一个站点想做 SEO,图片这一块都不能省。
头图(hero image)的特殊处理
每篇文章首屏看到的那张大图直接决定 LCP 评分。头图的优化要单独处理:
- 不要 lazy。给头图加
loading="eager"或干脆不写 loading 属性。LCP 元素懒加载会让 LCP 时间增加 0.5~1.5 秒。 - 用 fetchpriority="high"。Chrome 101+ 支持的属性,告诉浏览器这是高优先级资源。
- preload 一份。在 head 里
<link rel="preload" as="image" href="hero-1200.webp" imagesrcset="..." imagesizes="...">,浏览器在解析 HTML 时就开始下载头图。 - 头图分辨率适配。给手机首屏只下载 600px 宽的版本,桌面下载 1200px,能省 60% 流量。
这套对 LCP 的提升是肉眼可见的。我自己一篇热门文章加完 fetchpriority+preload 后 LCP 从 2.4s 直接降到 1.1s。
常见问题解答
WordPress 自动生成的多个尺寸图占空间太大怎么办?
WordPress 默认会生成 thumbnail、medium、large、full 四个尺寸,再加上主题自定义的尺寸,一张原图能膨胀成 6~10 个文件。优化办法:在 functions.php 里 remove_image_size() 删掉用不到的尺寸;用 ShortPixel 这类插件统一压缩;定期跑一次 Regenerate Thumbnails 清理废弃尺寸。我自己 zhangwenbao.com 把 large 和 medium_large 删掉,单图存储减少 40%。
WebP 在邮件客户端里显示不出来怎么办?
邮件客户端对 WebP 支持差,特别是 Outlook 桌面版完全不识别。如果你的站点会通过邮件发送图片(比如订阅推送),用 picture 标签做 jpeg 兜底,或者邮件正文里固定用 jpeg 格式。Web 端可以全部 WebP。
图片压缩到多少质量算合适?
WebP 75~80 是兼顾观感和体积的最佳点。低于 70 会出现明显色块,高于 90 体积膨胀但肉眼分辨不出区别。建议先用 80 跑一段时间观察用户反馈,没人抱怨清晰度就保持,否则微调到 85。
图片的 EXIF 信息要不要保留?
对外发布的图片要清掉 EXIF。EXIF 里可能包含拍照时的 GPS 位置、相机序列号、原始路径等敏感信息。WordPress 上传时勾选 ImageMagick 的"strip metadata"选项即可全部清空。原始版本本地留底用,对外只发清理后的版本。
给图片加链接对 SEO 有用吗?
有限。图片链接的锚文本是 alt 属性的文字,会传递一点权重,但远不如正文里文字超链接有用。建议是相关文章配图可以加链接到对应详情页,但不要为了加链接而加。让图片回到本职——传达视觉信息。
百度图片和 Google 图片的优化策略一样吗?
大体一样但有细微差别。百度对中文 alt 更敏感,建议百度站点 alt 用中文;百度图片搜索对图片来源页的整体权威性更看重,热门站点的图片优先。Google 对结构化数据更敏感,license 字段、ImageObject 配齐能拿到额外的搜索结果展示位。两个搜索引擎都要兼顾的话,全做就好,没有冲突。
带文字的图片要不要做 OCR?
不要把重要文字嵌入图片里,理由:搜索引擎不能完美 OCR 中文图片里的文字(Google 现在能 OCR 但准确率有限),而且这些文字 copy paste 不出来对用户也不友好。文字内容用 HTML 文字写在页面上,需要美化用 CSS。截图类图片在 alt 里把图中关键文字概括一遍即可。
每月跑一次的图片 SEO 体检
把图片优化做完一次还不够,需要每月做一次体检确保新增内容也合规:
- Search Console 的图片报告,看曝光数和点击数趋势是否健康。
- 用 Screaming Frog 爬全站,导出所有 img 标签,检查 alt 缺失、宽高缺失、过大文件。
- 抽 5~10 个高流量页面用 PageSpeed Insights 测一遍,看 LCP 是否在 2.5s 以内。
- 清理掉媒体库里没被任何文章引用的孤立图片,省存储和备份开销。
写在最后
图片 SEO 不是一招鲜的事情,是文件名、alt、格式、压缩、尺寸属性、懒加载、srcset、Image Sitemap、CDN 一整套配合。第一次做的话花两个工作日把现有站点全跑一遍,后续上传新文章时每张图都按规范处理。一个月后再去 Search Console 看图片报告,曝光数和点击数应该都有可观增长。我自己 zhangwenbao.com 的图片搜索流量在落实这套之后从月均 800 涨到 4500,对一个技术博客来说已经是显著加成。