WordPress 教程

WordPress 外链图片转本地 + WebP 压缩完整教程

外链图片有三个隐性代价:别人的服务器挂了你的图就没了、对方开防盗链你的页面就一片空白、每次加载都要跨域握手。这篇讲怎么把它们一次性收回自己服务器。

约 10 分钟读完

01为什么必须把外链图片转成本地图片

  • 可用性风险:图片托管在别人的图床或 CDN 上,对方停止服务、清理文件、启用防盗链,你的历史文章就会集体出现空白图。
  • 速度损耗:跨域请求需要额外的 DNS 解析与 TLS 握手,首屏图片多的时候感知很明显。
  • SEO 与合规:图片搜索流量会归到对方域名;同时热链他站图片在部分场景下存在版权争议。
  • 无法优化:外链图你无法压缩、无法转 WebP、无法加 srcset,等于放弃了图片侧的全部性能优化空间。

02第一步:扫描全站外链图片

  1. 1进入插件设置页,先执行一次「扫描」。这一步只读不写,会把全站文章与页面里的外链图片地址列出来。
  2. 2按文章维度查看结果,优先处理流量高的历史文章。
  3. 3留意扫描结果里的「重复出现次数」——同一张图在多篇文章里被引用时,转存一次即可复用。

先跑扫描、确认清单,再执行下载。这样你可以提前发现哪些图片源站已经失效,避免批量任务跑到一半大量报错。

03第二步:批量下载到本地媒体库

执行转存时,插件会把图片下载进 WordPress 媒体库,并自动改写文章正文里的图片地址。改写是逐个文章进行的,所以即使中途中断,已处理的文章也是完整一致的,不会出现半改状态。

如果文章数量很多,建议分批跑。单次处理过多图片容易触发 PHP 最大执行时间限制,表现是任务跑到一半白屏或报 504。

转存前先备份数据库。虽然插件会记录原地址以便回滚,但有一份备份永远是更稳的做法。

04第三步:格式转换与智能压缩

图片本地化之后才谈得上优化。插件支持单独或组合执行「格式转换」与「压缩」:

图片类型建议处理预期收益
照片 / 截图(JPG/PNG)转 WebP + 压缩体积通常下降 40%–70%,肉眼几乎无损
带透明通道的图(PNG)保留 PNG 或转 WebPWebP 支持透明,多数场景可直接转
动图(GIF)谨慎处理转 WebP 可能丢失部分兼容性,建议保留原格式
已经是 WebP只做压缩避免二次转码造成画质累积损失

WebP 在现代浏览器已经全面支持,但如果你的站点还有相当比例的老旧访问环境,建议保留 JPG/PNG 作为回退,而不是直接替换原文件。

05第四步:发布时自动转存

历史文章处理完之后,把「发布时自动转存」打开。之后你在编辑器里粘贴外部图片,插件会在保存文章时自动把它下载到本地。这样就不需要每隔几个月再跑一次批量清理。

自动转存会在保存时增加一点耗时,如果你的编辑器保存本身就慢,可以改成按需手动触发。

06常见报错与处理

图片下载失败 / 抓到的是防盗链占位图

部分图床会检查 Referer。这类图片用程序直接抓会拿到一张「禁止盗链」的提示图。处理办法是先在浏览器里把图片另存到本地,再通过媒体库手动上传,然后手动替换那几处引用。数量通常不多,人工处理反而更快。

任务超时 / 500 错误

根因是单次处理的图片数量超过了 PHP `max_execution_time`。解决办法是把文章分成几批跑,或者临时把执行时间上限调高。不要一次性处理几百篇。

转存后图片显示不出来

先确认媒体库文件确实存在,再检查服务器目录权限——`wp-content/uploads` 需要 Web 进程可写。权限问题表现为文件记录在数据库里但磁盘上没有实体文件。

常见问题

外链图片转本地会不会把服务器塞满?+

取决于原图体积。建议先跑一次扫描看总量,再分批转存;转存后立刻执行格式转换与压缩,通常能把占用降到原来的三分之一到一半。

转成 WebP 之后老浏览器还能显示吗?+

主流浏览器(Chrome、Edge、Firefox、Safari 14+)都已支持 WebP。如果站点仍有较多老旧访问环境,建议保留原格式作为回退,而不是直接替换。

转存后能回滚吗?+

插件会记录每张图片的原始外链地址,支持按文章回滚。但保守起见,批量操作前仍建议先备份数据库。

已经在用 CDN 了还需要本地化吗?+

CDN 加速的是你自己的图片,外链图片并不经过你的 CDN。所以两者不冲突——先本地化,再让 CDN 去加速本地图片,才是完整链路。

继续阅读