#197
Blogger 草稿正文截断与 IndexNow 422 错误排查全记录
在 ToolSignal Pro 的多语言自动化生成和发布流水线中,近期我们遭遇了一起非常棘手的严重事故:多个语种的自动化翻译草稿发布到 Blogger 后出现内容大面积空洞和缺失。正文除了开头的 Schema JSON 元数据脚本外,实际的排版样式及段落文字全部在 <style data-tsp-safety-css= 标记的正中间戛然而止,后续的分析内容与代码片段直接蒸发了。
原因分析:Playwright 生成提前判定与目录隔离限制
缺陷 A:Gemini 网页生成提前截断(Bypass Truncation)
在无 API 费用成本模式(Bypass Route)下,我们利用 Playwright 在后台驱动端口 9222 的 Chrome 实例以自动化调取 Gemini 会话。为了检测 Gemini 是否已输出完成,原本采用的是简单的“文本稳定性检测”算法,即每 1.5 秒轮询一次,若连续 3 次字数没有变化,则判定为生成完毕。
然而,当生成大分量、长排版的高质量 IT 深度调试指南时,Gemini 往往会在渲染大型复杂的表格和嵌套代码块中途,出现 2 至 3 秒의 计算停顿。轮询算法误将这种中途의 停顿当成了“生成结束”,在文本尚未闭合的情况下提前进行了 DOM 抓取和更新,导致发布到草稿箱的正文被腰斩。
缺陷 B:IndexNow 的子目录安全限制(422 Mismatch)
在全网进行 Sitemap 色彩验证时,由于 Blogger 不允许直接在根目录 / 下上传自定义 plain-text 认证文件,我们当时将 IndexNow 的自签名密钥文件部署在了一个专用的 Blogger 页面:https://www.toolsignalpro.com/p/indexnow-key.html。
然而,IndexNow 的网关拥有非常严格的安全子域限制:如果 keyLocation 位于子目录 /p/ 中,该密钥将只能用于验证并提交该子目录(即 /p/ 及其更深层路径)以下的页面 URL。当我们尝试提交根域名或常规博文路径(如 /2026/05/)时,Bing 立即抛出了 422 Unprocessable Entity 错误。
安全防御与自愈(Self-Healing) 패치
1. 引入停止按钮检测机制与 9 秒无更待时间
为了从源头上杜绝生成文本提前截断的问题,我们为 Gemini Web Bypass 抓取逻辑引入了混合双重防线:
- 停止按钮监视:实时检测 Gemini 网页底部的“停止生成(Stop generating)”按钮。只要该按钮依然处于可见、活跃状态,说明模型仍在进行流式渲染,立即将稳定性计数重置为零并强行等待。
- 9 秒无变更大容忍度:将字数稳定性轮询次数从 3 次提升到 6 次(即实现至少 9 秒的绝对稳定性校验),以应对大型代码输出的缓冲延迟。
2. 绕道 IndexNow 密钥免 Location 验证
我们查阅 IndexNow 安全白皮书并成功验证:对于已在 Bing Webmaster Tools 进行了域名控制权认证的站点,向 IndexNow 网关发送提交请求时,keyLocation 字段是可以完全省略的!我们在 indexnow.py 和 auto_indexer.py 中将 keyLocation 改为了非必填,在发送 Payload 时彻底免除了 Location URL。现在所有的 sitemap 色彩提交都能够收到 202 Accepted 成功响应!