xmllint --noout https://example.com/feed/ # 有错会直接指出行号和标签名
给 feed 加了一段广告代码,订阅器里从那条开始后面的正文全没了,浏览器直接打开 feed 还能看到剩下的内容。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:广告片段塞在 CDATA 里面,中间又出现了结束标记,解析在这里就断了。未闭合的 div 也会让阅读器丢弃后面的节点。feed 是严格 XML,容错比浏览器差得多。
「feed 广告注入」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
处理上按这个顺序:广告代码里不要出现 CDATA 结束符,有的话拆开拼接;插入前用 XML 校验器跑一遍,标签必须成对闭合;广告放在每个条目之外或每篇末尾,别插在正文中间。
确认没问题再收工,feed 通过 XML 校验,订阅器里广告和正文都能完整显示。
