Skip to content

Moze54/uSiteMap-typecho-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Typecho uSitemap 插件

自动生成符合标准的 XML 网站地图,支持百度和 IndexNow(Bing、Yandex 等)搜索引擎推送,帮助搜索引擎更好地索引您的网站内容。

✨ 功能特性

Sitemap生成

  • 符合标准 - 完全遵循 Sitemap 协议规范
  • 🔄 自动生成 - 自动包含文章、页面、分类和标签
  • ⚙️ 灵活配置 - 可自定义包含的内容类型
  • 🚫 排除功能 - 支持排除特定文章或页面
  • 🔒 隐私保护 - 自动排除加密文章和草稿
  • 📅 准确时间 - 使用页面实际修改时间,非生成时间
  • 🎯 简洁高效 - 仅包含必需标签,输出更简洁

搜索引擎推送

  • 📍 百度推送 - 支持API推送和Sitemap推送两种方式
  • 🎯 IndexNow推送 - 使用 IndexNow API,一次推送同时通知 Bing、Yandex、Seznam 等多个搜索引擎
  • 🤖 自动推送 - 文章发布/更新时自动推送到搜索引擎
  • 📊 推送日志 - 详细的推送记录,便于追踪推送状态
  • 🎛️ 灵活配置 - 可自定义推送时机和推送数量

📦 环境要求

必需的 PHP 扩展

  • curl - 用于搜索引擎推送
  • domsimplexml - 用于生成 XML 站点地图

必需的权限

  • 网站根目录写入权限 - 用于创建 IndexNow 验证文件({key}.txt)

📦 安装方法

  1. 下载插件文件
  2. 将文件夹重命名为 uSitemap
  3. 上传到 Typecho 的 usr/plugins/ 目录
  4. 在后台「控制台」→「插件」中启用插件
  5. 点击「设置」进行配置

🖼️ 界面预览

插件配置界面

插件配置界面

配置界面采用标签页设计,分为以下四个部分:

  • Sitemap设置 - 配置站点地图的基本参数
  • 百度推送 - 配置百度搜索引擎推送
  • Bing推送 - 配置 IndexNow 推送
  • 推送记录 - 查看推送历史记录

⚙️ 配置选项

Sitemap基础设置

包含的内容类型

选择要包含在站点地图中的内容:

  • 文章 (Posts) - 博客文章
  • 独立页面 (Pages) - 关于、联系等独立页面
  • 分类 (Categories) - 分类归档页面
  • 标签 (Tags) - 标签归档页面

排除内容

输入要排除的文章或页面 ID,每行一个。例如:

15
28
36

密码保护内容

选择是否包含设置了密码访问的内容(默认不包含)

更新频率

设置内容的更新频率,这将影响搜索引擎抓取频率:

  • 始终
  • 每小时
  • 每天
  • 每周
  • 每月
  • 每年
  • 从不

默认优先级

设置 URL 的默认优先级(0.0 - 1.0),首页优先级会自动加 0.1

最大条目数

站点地图中包含的最大 URL 数量,默认 50000

搜索引擎推送配置

百度推送

  • 启用百度推送:开启后,文章发布/更新时会自动推送到百度
  • 百度站点:百度站长平台中验证的站点域名(如:example.com)
  • 百度推送Token:在百度站长平台「普通收录」-「资源提交」-「普通收录」中获取的推送接口令牌
  • 推送方式
    • API推送:实时推送单个URL,速度更快
    • Sitemap推送:推送sitemap地址,批量提交
  • 自动推送触发:可选择在发布文章时或更新文章时推送(建议同时勾选)
  • 手动推送数量:手动推送时推送的最新N条内容,建议不超过100条

如何获取百度推送配置

  1. 访问 百度搜索资源平台
  2. 登录并验证网站所有权
  3. 进入「普通收录」→「资源提交」→「普通收录」
  4. 选择「API推送」方式,获取推送接口令牌(Token)
  5. 在「资源提交」-「资源替换」中获取站点域名

IndexNow推送(Bing、Yandex等)

  • 启用IndexNow推送:开启后,文章发布/更新时会自动推送到支持 IndexNow 的搜索引擎
  • IndexNow Key:IndexNow验证密钥,留空则启用时自动生成。插件会自动在网站根目录创建验证文件
  • 自动推送触发:可选择在发布文章时或更新文章时推送(建议同时勾选,IndexNow API 支持实时通知搜索引擎内容更新)
  • 手动推送数量:手动推送时推送的最新N条内容,建议不超过100条

关于 IndexNow: 本插件使用 Microsoft Bing 的 IndexNow API 进行推送。启用时会自动生成验证密钥并创建验证文件到网站根目录。

自动配置流程

  1. 启用 IndexNow 推送功能(Key 留空即可自动生成)
  2. 保存配置后,插件会自动生成随机密钥
  3. 插件会自动在网站根目录创建验证文件(格式:{key}.txt)
  4. 验证文件内容为密钥本身,确保可公网访问
  5. 即可开始推送 URL 到 Bing 和其他支持 IndexNow 的搜索引擎

验证文件自动修复

  • 如果验证文件被意外删除,插件会在您下次访问设置页面时自动重新创建
  • 无需手动干预,确保推送功能始终可用

关于 IndexNow Key 变更

  • IndexNow Key 是网站所有权的验证凭证,用于证明您有权提交 URL
  • 已提交的 URL:使用旧 Key 提交的 URL 仍然有效,不会被搜索引擎撤回
  • 未来推送:新 Key 生效后,新的 URL 推送将使用新 Key 进行验证
  • 建议:通常情况下无需更改 Key,除非怀疑密钥泄露
  • 注意:IndexNow Key 字段为只读,不支持手动修改

IndexNow 会同时推送到 Bing、Yandex、Seznam 等多个搜索引擎。

📝 使用方法

访问站点地图

启用插件后,访问以下地址查看生成的站点地图:

https://your-domain.com/sitemap.xml

手动推送

在插件设置页面,每个搜索引擎都有「手动推送」按钮:

  1. 切换到对应搜索引擎的标签页
  2. 配置好推送参数(API密钥、Token等)
  3. 点击「立即推送」按钮
  4. 查看推送结果

自动推送

启用搜索引擎推送后,当您发布或更新文章时,系统会自动推送到已启用的搜索引擎。

查看推送记录

  1. 切换到「推送记录」标签页
  2. 点击「刷新记录」查看最新的推送日志
  3. 点击「清空记录」可以删除所有推送日志

提交Sitemap到搜索引擎

Google Search Console

  1. 登录 Google Search Console
  2. 选择您的网站
  3. 在左侧菜单选择「站点地图」
  4. 输入 sitemap.xml 并提交

Bing 网站管理员工具

  1. 登录 Bing 网站管理员工具
  2. 选择您的网站
  3. 在「站点地图」部分提交 sitemap.xml

百度搜索资源平台

  1. 登录 百度搜索资源平台
  2. 选择「普通收录」→「sitemap」
  3. 提交您的 sitemap 地址

robots.txt 配置

建议在网站根目录的 robots.txt 文件中添加站点地图地址:

User-agent: *
Allow: /

Sitemap: https://your-domain.com/sitemap.xml

📋 站点地图格式示例

生成的 XML 文件格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://your-domain.com/</loc>
    <lastmod>2025-10-13</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://your-domain.com/archives/1/</loc>
    <lastmod>2025-10-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://your-domain.com/about.html</loc>
    <lastmod>2025-10-01</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <!-- 更多 URL ... -->
</urlset>

🔍 技术说明

XML 标签说明

<urlset> (必需)

  • 包裹所有 URL 的根标签
  • 必须包含命名空间声明

<url> (必需)

  • 每个 URL 的父标签
  • 每个 URL 一个 <url> 标签

<loc> (必需)

  • 页面的完整 URL
  • 必须以协议开头(http 或 https)
  • 最多 2,048 字符

<lastmod> (可选)

  • 页面最后修改时间
  • W3C Datetime 格式
  • 格式:YYYY-MM-DD(使用简洁的日期格式)
  • 重要:显示的是页面实际修改时间,而非站点地图生成时间

<changefreq> (可选)

  • 页面更新频率
  • 可选值:always、hourly、daily、weekly、monthly、yearly、never

<priority> (可选)

  • 页面优先级
  • 范围:0.0-1.0
  • 默认值:0.5
  • 首页会自动加 0.1

自动排除的内容

插件会自动排除以下内容:

  • 草稿、待审核等非发布状态的内容
  • 设置了密码的加密文章
  • 在配置中手动排除的内容 ID

性能优化

  • 直接从数据库查询,避免多次对象实例化
  • 使用流式输出,节省内存
  • 仅在访问时生成,不占用存储空间

lastmod 时间优化

插件智能处理各类内容的最后修改时间:

  • 文章/页面:使用实际的 modified 字段(内容最后修改时间)
  • 首页:使用最新发布文章的修改时间
  • 分类:使用该分类下最新文章的修改时间
  • 标签:使用该标签下最新文章的修改时间
  • 格式:使用 YYYY-MM-DD 格式(W3C Datetime 标准)

这样确保搜索引擎获得准确的页面更新信息,而不是站点地图生成时间。

推送机制

自动推送

  • 文章发布/更新时自动触发
  • 支持配置推送时机(发布时/更新时/两者都推送)
  • 异步执行,不影响用户体验

手动推送

  • 支持批量推送最新的N条URL
  • 实时显示推送结果
  • 推送记录保存在日志文件中

推送限制

  • 百度API:单次最多2000条
  • IndexNow API:最多10,000条

❓ 常见问题

Sitemap相关

1. 访问 sitemap.xml 返回 404

  • 确保插件已启用
  • 尝试在后台禁用并重新启用插件
  • 检查 URL 重写是否正常工作
  • 确认伪静态规则已正确配置

2. 某些文章没有出现在站点地图中

  • 检查文章状态是否为「已发布」
  • 确认文章没有设置密码
  • 检查是否在「排除内容 ID」中添加了该文章
  • 确认内容类型(文章/页面/分类/标签)已勾选

3. 如何更新站点地图?

站点地图是实时生成的,每次访问都会显示最新内容,无需手动更新。

4. 站点地图可以被缓存吗?

可以,建议在服务器或 CDN 层面设置适当的缓存时间(如 1-6 小时)以提高性能。

5. 支持站点地图索引吗?

当前版本生成单个站点地图文件。如果内容超过 50,000 条或文件大小超过 50MB,建议使用专业的 SEO 插件。

推送相关

6. 推送失败怎么办?

  • 检查API密钥/Token是否正确
  • 确认网站已在搜索引擎平台验证通过
  • 查看推送记录中的错误信息
  • 检查服务器网络连接是否正常
  • 确认 PHP curl 扩展已启用

7. 推送次数有限制吗?

各搜索引擎对API推送都有配额限制:

  • 百度:每天最多10万次
  • IndexNow:无明确限制,建议合理使用

8. 自动推送和手动推送有什么区别?

  • 自动推送:文章发布/更新时自动触发,无需手动操作
  • 手动推送:主动推送最新的N条URL,适合批量推送历史内容

9. 推送日志保存在哪里?

推送日志保存在 usr/plugins/uSitemap/logs/ 目录下,按日期和搜索引擎分类存储。

10. IndexNow 推送失败,提示验证文件不存在?

  • 确保网站根目录有写入权限
  • 使用插件设置中的"检测验证文件"功能检查
  • 验证文件应位于网站根目录,格式为:{key}.txt
  • 确保验证文件可以公网访问
  • 自动修复:如果验证文件被意外删除,插件会在您下次访问设置页面时自动重新创建

11. IndexNow Key 更换后对之前提交的 URL 有影响吗?

  • 没有影响:IndexNow Key 仅用于验证网站所有权,与已提交的 URL 无关
  • 已提交的 URL:使用旧 Key 提交的 URL 仍然有效,已被搜索引擎记录
  • 新 Key 的作用:仅用于验证新的 URL 推送请求
  • 建议:一般情况下无需更换 Key,除非怀疑密钥泄露
  • 注意:IndexNow Key 字段为只读,不支持手动修改

🔧 高级用法

自定义路由

如果需要修改站点地图的访问路径,可以编辑 Plugin.php 中的路由设置:

Helper::addRoute('sitemap', '/your-custom-path.xml', 'uSitemap_Action', 'index');

与静态缓存插件配合

如果使用了静态缓存插件,建议将 sitemap.xml 设置为动态路径或定期更新缓存。

批量推送历史内容

如果需要推送大量历史文章:

  1. 在配置中设置较大的手动推送数量(如100-500)
  2. 点击「立即推送」按钮
  3. 等待推送完成
  4. 查看推送记录确认结果

自定义推送时机

如果只想在特定情况下推送:

  • 取消勾选「发布文章时」
  • 取消勾选「更新文章时」
  • 仅在需要时使用手动推送功能

📊 SEO 最佳实践

  1. 定期提交 - 每次发布新内容后,通知搜索引擎抓取站点地图
  2. 监控收录情况 - 通过搜索引擎管理员工具查看收录统计
  3. 配合 robots.txt - 确保站点地图可被搜索引擎访问
  4. 保持更新 - 修改文章后,站点地图会自动反映最新的修改时间
  5. 合理设置优先级 - 重要内容设置更高的优先级(0.8-1.0)
  6. 选择合适的更新频率 - 根据内容更新频率设置changefreq
  7. 多平台推送 - 同时向多个搜索引擎推送,提高覆盖率
  8. 分析推送效果 - 定期查看推送日志,优化推送策略

📄 协议规范

本插件严格遵循以下规范:

🔗 相关资源

官方平台

开发文档

📝 更新日志

2.0.0 (2025-03-20)

  • 🎉 重大更新 - 新增多搜索引擎推送功能
  • 百度推送 - 支持API推送和Sitemap推送两种方式
  • IndexNow推送 - 使用 IndexNow API,一次推送通知多个搜索引擎
  • 🤖 自动推送 - 文章发布/更新时自动推送
  • 📊 推送日志 - 详细的推送记录功能
  • 🎨 界面优化 - 全新的标签页式配置界面
  • 📝 帮助提示 - 每个搜索引擎配置都附带详细的获取指南
  • 🔧 环境检测 - 自动检测并提示必需的 PHP 扩展和权限
  • 🛠️ 兼容性改进 - 自动处理空配置,使用默认值

1.0.0 (2026-3-18)

  • 🎉 首次发布
  • ✅ 支持文章、页面、分类、标签
  • 📅 智能获取页面实际修改时间
  • 🚫 支持排除特定内容
  • 📊 符合 Sitemap 0.9 协议规范
  • 🎯 简洁输出,仅包含必需的 <loc><lastmod> 标签

👨‍💻 作者

优优

📄 许可证

本插件遵循 Typecho 相关许可协议。

📁 项目结构

uSitemap/
├── Plugin.php              # 插件主文件
├── Action.php              # 动作类,处理Sitemap生成和推送
├── BaiduPusher.php         # 百度推送类
├── BingPusher.php          # IndexNow推送类
├── SearchEnginePusher.php  # 搜索引擎推送基类
├── logs/                   # 推送日志目录
│   ├── baidu_push_*.log
│   └── bing_push_*.log
└── README.md               # 说明文档

🤝 贡献

欢迎提交 Issue 和 Pull Request!

⭐ Star History

如果这个项目对你有帮助,请给个 Star 支持一下!

📮 联系方式


注意:使用本插件前请确保您的服务器支持 PHP curl 和 dom/simplexml 扩展,并且网站根目录具有写入权限(用于创建 IndexNow 验证文件)。

About

自动生成符合标准的 XML 网站地图,支持百度和 IndexNow(Bing、Yandex 等)搜索引擎推送,帮助搜索引擎更好地索引您的网站内容。

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages