WordPress 站点地图:为什么我放弃动态生成,改用静态文件

很多人装站点地图插件只是图省事,但我更在意一个朴素的问题:为什么搜索引擎每次来抓,都要让 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 静态文件”,希望这篇文章能给你一个可落地的参考。静态 + 实时重写,是我目前认为站点地图最舒服的平衡点。

七、下载地址

本内容需要登录后查看
上一篇 把友情链接做成一座战斗机雷达:一个让友链「活过来」的 WordPress 友链插件