EMLOG 图片 SEO 增强插件 —— 一条文章钩子,让图片同时搞定收录与 Core Web Vitals

很多站长知道给图片加alt属性利于 SEO,也知道懒加载能提速。但真正动手优化的时候,往往要面对几个棘手的问题:

  • 老文章已经有几百篇了,逐个手动改alt不现实;
  • 写文章时编辑器里随手插入的图片经常忘了补全 SEO 属性;
  • 百度、谷歌的图片搜索收录慢,不知道除了alt还能做什么;
  • LCP、CLS 总是拿不到满分,图片拖了后腿却无从下手;
  • 外链图片被人盗链还在其次,隐私 Referer 泄漏才是隐患。

「图片 SEO 增强」这款 EMLOG 插件就是为了解决上面这一系列问题而生的。它不修改你的数据库、不入侵模板文件,只是在文章输出的一瞬间悄悄为图片做了一层"美颜"。

一、插件核心功能一览

Emlog 图片SEO增强 插件

插件挂载 EMLOG 的article_content_echo钩子,在文章内容即将发送给浏览器前,用正则匹配所有<img>标签,并按需补全以下 6 大属性与数据:

功能 自动添加的属性 / 数据 解决的问题
alt 替代文本 alt="文章标题" 或 alt="文件名"(可加前后缀) 搜索引擎理解图片内容的最核心依据
title 悬停提示 title="文章标题" 鼠标悬停时的友好提示,部分搜索源也会参考
懒加载 loading="lazy" 首屏外图片延迟加载,降低 LCP 与流量消耗
异步解码 decoding="async" 图片解码不阻塞主线程,提升交互响应速度
尺寸属性 width="xxx" height="xxx"(仅本地图) 浏览器提前预留占位,降低布局偏移 CLS
结构化数据 ImageObjectJSON-LD 帮助搜索引擎将文章图片识别为结构化对象,增强图片搜索展示
外链保护 referrerpolicy="no-referrer"(外链图) 防止向第三方图片服务器泄露页面地址

每一项都可以在后台独立开关,想开就开,想关就关,不会互相干扰。

二、实际效果长什么样?

假设你写文章时插入了一张图片,原始 HTML 是这样的:

<p>下面是一张演示图:</p>
<img src="/content/uploadfile/2026/09/photo-12345.jpg">

插件输出后,这张图片会变成:

<p>下面是一张演示图:</p>
<img src="/content/uploadfile/2026/09/photo-12345.jpg"
     alt="EMLOG 图片 SEO 增强插件实测"
     title="EMLOG 图片 SEO 增强插件实测"
     loading="lazy"
     decoding="async"
     width="1200" height="800">

文章末尾还会自动追加一段不影响排版的 JSON-LD:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "EMLOG 图片 SEO 增强插件实测",
  "image": [
    {
      "@type": "ImageObject",
      "url": "https://your-site/content/uploadfile/2026/09/photo-12345.jpg",
      "name": "EMLOG 图片 SEO 增强插件实测"
    }
  ]
}
</script>

三、技术细节里的几个"加分项"

一个好插件不仅功能要对,细节也要经得起推敲。这款插件在源码里做了几件特别值得一提的事:

1. 已有属性不会被覆盖

如果图片在编辑时已经手动写了alt="好图片",插件不会再用文章标题去覆盖它。它只"补全缺失项",绝不做多余的事。这一点对已有手动优化的老文章特别重要。

2. alt 文本来源智能回退

用户可以选择 alt 来源为"文件名"。但插件考虑到了文件名可能是1389472398.jpg这种无意义哈希串,所以它会先判断:文件名是否为纯数字或 8 位以上十六进制串?如果是,就自动回退到文章标题,避免生成垃圾 alt 文本。

3. 本地图片尺寸获取有安全边界

获取本地图片尺寸时,插件会先把src转换为服务器绝对路径,然后用realpath()规范化,最后检查路径是否在EMLOG_ROOT之内。也就是说,即使src里被塞入../../../etc/passwd这种路径穿越字符串,也不会读取到站点外的文件。安全意识在线。

4. 静态缓存避免重复 IO

同一篇文章里如果有 5 张图片,都来自同一个文件路径,getimagesize()只会被调用一次,结果存在函数静态变量里复用,性能开销极低。

5. 外链图片识别与隐私保护

插件通过对比图片src的域名与BLOG_URL,判断是否为外链。外链图片除了可以选择是否应用 SEO 属性外,还会自动加上referrerpolicy="no-referrer",防止 Referer 头泄露。

6. 数据库零污染

整篇插件没有写一次数据库。所有处理都在输出时实时完成。这意味着:

  • 原文章内容永远是干净的;
  • 禁用插件 = 一切恢复原样;
  • 更换主机、迁移数据库都不需要额外处理。

四、后台设置界面长这样

设置页面分为三个 Tab:

  • 基本设置 —— 所有开关集中在这里,支持启用/禁用、alt 来源切换、前后缀自定义、是否处理外链图片等。
  • 关于插件 —— 显示插件版本、作者、PHP 兼容范围等基本信息。
  • 更新日志 —— 从info.json读取的版本历史。

所有设置用 EMLOG 自带的Storage::getInstance()存储,不占用额外数据表。

五、兼容性

  • PHP:7.4 ~ 8.3,覆盖目前主流运行环境;
  • EMLOG:遵循官方插件规范,挂载标准钩子article_content_echo,不依赖任何第三方插件;
  • 浏览器:所有生成的属性(loading、decoding、referrerpolicy、JSON-LD)均为 HTML5 标准特性,现代浏览器完整支持,老浏览器也能正常降级渲染。

六、写在最后

如果你的 EMLOG 博客上已经积累了不少文章,现在又想在图片 SEO 和 Core Web Vitals 上补一补课,这款插件是一个非常轻量且安全的选择。它不会破坏你现有的任何内容,却能让搜索引擎和浏览器同时"看懂"你的图片。

插件作者「落寞」的博客地址是 https://www.cnlog.cc/,有问题或建议可以去留言。

最后提一句:SEO 插件从来不是越多越好,恰到好处的补全 + 不瞎做多余的事,才是长期稳定的优化之道。