|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、需求背景
问题现象:
- 论坛新帖发布后,被 Bing 搜索引擎收录需要 1 天左右时间
- 被动等待 Bingbot 爬虫抓取,收录效率不可控
- 新帖无法及时出现在搜索结果中,影响内容传播时效
目标设定:
- 实现新帖发布后分钟级收录
- 主动通知 Bing 内容更新,减少依赖爬虫轮询
- 零成本实现,不购买付费插件
2、技术方案
| 项目 | 选择 | 理由 | | 推送协议 | IndexNow | Bing 官方支持的主动推送协议,免费、轻量 | | 推送方式 | sitemap 全量推送 + 智能增量检测 | 利用现有 sitemap 插件,无需修改发帖逻辑 | | 运行方式 | 手动 + 定时智能检测双保险 | 灵活可控,避免无效推送 | | 脚本语言 | Bash + curl | 系统自带,无需额外依赖 |
核心流程图:
- flowchart TD
- A[手动生成 sitemap.xml] --> B[执行手动推送脚本]
- B --> C[提取 URL 并分批提交]
- C --> D[Bing 收到通知并抓取]
-
- E[crontab 每小时触发] --> F[智能检测脚本]
- F --> G{sitemap 是否更新?}
- G -->|是| B
- G -->|否| H[跳过本次执行]
复制代码
3、实施步骤
3.1 获取 Bing API 密钥
3.2 创建核心推送脚本
文件:/www/indexnow-push.sh
功能:从本地 sitemap.xml 提取 URL,分批(每批 500 条)通过 curl 提交至 Bing IndexNow API
关键代码片段:
- # 分批推送
- BATCH_SIZE=500
- for ((start=1; start<=TOTAL_URLS; start+=BATCH_SIZE)); do
- # 构建 JSON 并提交
- curl -X POST "https://api.indexnow.org/IndexNow" \
- -H "Content-Type: application/json" \
- -d @/tmp/batch_data.json
- done
复制代码
3.3 创建智能检测脚本
文件:/www/indexnow-push-smart.sh
功能:比对 sitemap 文件修改时间戳,仅在文件更新时调用核心脚本
- # 检测 sitemap 是否变化
- if [ "$SITEMAP_MTIME" -eq "$LAST_RUN" ]; then
- exit 0 # 无变化,跳过
- fi
- echo "$SITEMAP_MTIME" > "$STATE_FILE"
- /bin/bash /www/indexnow-push.sh
复制代码
3.4 配置自动化
crontab 定时任务(每小时第 5 分钟执行):
- 5 * * * * /bin/bash /www/indexnow-push-smart.sh
复制代码
手动推送快捷别名(~/.bashrc):
- alias indexnow="bash /www/indexnow-push.sh"
复制代码
4、配置文件清单
| 文件路径 | 作用 | 创建方式 | | /www/indexnow-push.sh | 核心推送脚本 | 多行命令直接生成 | | /www/indexnow-push-smart.sh | 智能检测包装脚本 | 多行命令直接生成 | | /www/indexnow_push.log | 核心推送日志 | 脚本自动创建 | | /www/indexnow_smart.log | 智能脚本日志 | 脚本自动创建 | | /www/indexnow_lastrun.state | sitemap 时间戳记录 | 脚本自动创建 | | /{API_KEY}.txt | IndexNow 验证文件 | 手动上传至根目录 |
5、实施效果对比
| 指标 | 实施前 | 实施后 | 变化 | | 新帖收录时间 | 约 24 小时 | 约 10-30 分钟 | ⬇️ 90%+ | | 推送方式 | 被动等待 Bingbot | 主动推送 IndexNow | 可控性大幅提升 | | 推送覆盖 | 无 | 每批 500 URL,共 5000 条/次 | 全量覆盖 | | 服务器负担 | - | 每日仅新增 10 次 API 调用 | 可忽略 | | 成本 | 0 元 | 0 元 | 无额外支出 |
6、技术沉淀点
- IndexNow 协议的轻量性:仅需一个 API 密钥和简单的 HTTP POST 请求即可实现主动推送,无需复杂配置。
- 本地文件读取绕过 WAF:直接从服务器本地读取 sitemap.xml,避免了网络请求被雷池 WAF 拦截(468 状态码)的问题。
- 分批推送的必要性:IndexNow 单次提交限制 URL 数量,需分批处理。每批 500 条、间隔 1 秒可稳定通过。
- 时间戳智能检测:通过 stat -c %Y 获取文件修改时间戳,比对状态文件实现精准的“仅更新时执行”。
- 双保险策略:手动推送为主、定时检测为辅的设计,兼顾灵活性和自动化。
7、后续维护建议
| 事项 | 频率 | 说明 | | 检查推送日志 | 每周 | cat /www/indexnow_push.log 确认无异常 | | 检查 API 密钥有效性 | 每月 | 确保密钥文件仍在根目录且可访问 | | 调整 sitemap 数量 | 按需 | 当前 5000 条适合 Daily 更新,若帖子增长快可适当调减 | | 升级时备份脚本 | 系统升级前 | Discuz! 升级不影响 /www/ 目录,但建议备份 |
总结:
通过部署 IndexNow 主动推送系统,论坛新帖的 Bing 收录时间从约 24 小时缩短至 10-30 分钟。采用“手动 + 智能定时”双保险策略,兼顾了操作的灵活性和系统的自动化程度。整个方案零额外成本,脚本逻辑简洁、可维护性强,为后续搜索引擎优化(SEO)工作奠定了良好的基础。 |
|