

很多人装站点地图插件只是图省事,但我更在意一个朴素的问题:为什么搜索引擎每次来抓,都要让 PHP 现查一遍数据库?
一、插件简介:这不是又一个”动态输出”的 sitemap 插件
市面上大多数 WordPress 站点地图插件(Yoast、Rank Math、Google XML Sitemaps 等)走的都是同一条路:注册一条伪静态路由,每次请求都动态查询数据库,当场拼出 XML 输出。优点是省事、永远最新;缺点是每次抓取都在消耗 PHP 进程,站点一大就容易成为性能瓶颈。
这个插件反其道而行——把地图落成真实的静态文件:
1、sitemap.xml 和sitemap.html 是磁盘上真实存在的文件,启用格式就创建,关闭格式就删除;
2、文件写到网站根目录后,由 Nginx / Apache 直接静态输出,完全绕开 PHP;
3、但内容不会因此变“旧”——一旦文章、页面、分类、标签有任何更新,插件会实时重写这两个文件,永远保持最新。
一句话概括:兼具静态文件的性能,又保留了动态生成的实时性。
二、部署环境需求
| 项目 | 要求 | 说明 |
|---|---|---|
| WordPress | 5.0 及以上 | 依赖 wp_upload_dir、update_option 等成熟 API |
| PHP | 7.0 及以上 | 未使用任何新语法,兼容旧环境 |
| 文件写入权限 | 网站根目录可写(推荐) | 用于创建 sitemap.xml / sitemap.html;根目录不可写时自动回退到 wp-content/uploads/modern-sitemap/ |
| Web 服务器 | Nginx / Apache 均可 | 标准配置下 try_files 会优先命中已存在的静态文件 |
提示:若根目录不可写,插件会自动把文件写到上传目录,此时由插件读取文件输出(仍是静态文件,只是”读文件”而非”动态查询”)。生产环境建议给根目录写权限,让 Web 服务器直接托管,性能最优。
三、插件功能介绍
1. 真实静态文件,启用即建、关闭即删
后台用复选框勾选两种格式:
XML 地图(sitemap.xml )→ 供搜索引擎抓取
HTML 地图(sitemap.html )→ 供访客浏览
勾选并保存 → 立即创建对应文件;取消勾选并保存 → 立刻删除对应文件,该地址返回 404,不再对外提供。
2. 内容一变,文件自动重写
插件通过钩子实时监听以下变化,触发重写静态文件:
文章 / 页面:发布、更新、删除、移入回收站、还原(save_post、wp_trash_post、untrash_post、before_delete_post)
分类 / 标签:新增、编辑、删除(created_*、edited_*、delete_*)
首页:由文章或静态首页构成,随上述内容联动更新
并对自动保存(autosave)、修订版本(revision)、批量导入(import)做了防御性跳过,避免无效重写、浪费性能。
3. 内容开关,粒度为”类”
后台可独立开关 首页 / 文章 / 页面 / 分类 / 标签 五类内容是否进入地图,取消勾选即从地图隐藏,保存后同步重写文件。
4. 现代化 HTML 地图页
sitemap.html 是一套无需依赖主题的响应式页面:
渐变头部 + 站点图标(自动读取”站点身份”图标,缺失则回退 /favicon.ico)
卡片式分区(文章 / 页面 / 分类 / 标签)、胶囊式标签云
移动端自适应,全程无框架依赖
5. 短代码嵌入
[ modern_sitemap ]
在任意文章或页面插入短代码,即可把 HTML 地图嵌进内容里展示(短代码场景下为动态展示)。
6. 配套工程细节
robots.txt自动接入:激活后自动向robots.txt 写入Sitemap: 声明
诊断面板:后台直观显示每类内容的”开关状态 / 站点总数 / 地图已生成数”,快速定位”为什么某类没进地图”
备用路由:msm-sitemap.xml / msm-sitemap.html,用于排查 sitemap.xml 是否被其他插件或静态文件劫持
安全合规:所有输出转义、设置保存带 nonce 校验与 manage_options 权限检查
四、使用教程
第 1 步:安装
二选一:
ZIP 上传:后台「插件 → 安装插件 → 上传插件」选择 modern-sitemap.zip → 启用;
手动部署:把 modern-sitemap 文件夹上传到 wp-content/plugins/ 目录 → 后台启用。
启用瞬间,插件会自动生成已勾选格式的静态文件。
第 2 步:配置
进入「设置 → 站点地图」:
内容开关:勾选要进地图的内容类型(首页 / 文章 / 页面 / 分类 / 标签);
地图生成格式:勾选 XML、HTML(可只选其一,或都选);
可自定义 HTML 地图标题、单组数量上限(避免站点过大导致文件过长);
点击「保存设置」——保存即触发文件的创建 / 删除 / 重写。
第 3 步:验证
页面下方「静态地图文件」表格会显示每个文件的状态:
✔ 已生成 + 文件大小 + 完整路径 → 说明文件已落盘;
尚未生成 → 点「立即重新生成静态文件」;
顶部出现红色错误提示 → 通常是目录不可写,按提示检查权限。
确认文件生成后,浏览器访问:
https://你的域名/sitemap.xml
https://你的域名/sitemap.html
第 4 步:日常维护(几乎零成本)
发布/更新文章:插件自动重写文件,无需手动操作;
想隐藏某类内容:取消勾选对应开关 → 保存;
想彻底关闭某格式:取消勾选 → 保存,文件即被删除;
怀疑被其他插件抢占地址:访问 msm-sitemap.xml 对比,若这里内容完整而 sitemap.xml 缺失,说明该地址被别的东西接管,去停用其他 sitemap 插件或删除根目录的静态文件即可。
六、总结
这个插件的核心思路其实很”笨”:既然搜索引擎要的是稳定、快速、可缓存的 XML,那就直接给它一个真实的文件;既然访客要的是好看、好用的页面,那就把页面也渲染成静态文件。至于”最新”,靠一套钩子体系在内容变化时实时重写来兜底。
优点:
- 静态文件性能最优,Web 服务器直出,不占 PHP 进程
- 内容更新实时重写,永远最新
- 开箱即用的现代化 HTML 地图 + 短代码
- 诊断面板 + 备用路由,排查问题有据可依
适用边界:
- 追求性能、想要真实静态 XML 的站点;
- 不希望依赖大型 SEO 全家桶、只要”刚好够用”的轻量方案;
- 站点规模在数万条以内时体验最佳(超大规模建议开启数量上限)。
如果你也在纠结”动态生成 vs 静态文件”,希望这篇文章能给你一个可落地的参考。静态 + 实时重写,是我目前认为站点地图最舒服的平衡点。