Jekyll网站站点地图(sitemap.xml)混入异常脚本导致Google站长工具导入失败
嘿,这情况真的挺闹心的——好好的XML站点地图里居然混进了一段<script>代码,Google站长工具对XML格式的合法性要求特别严格,这种非XML内容直接就把整个sitemap搞失效了,难怪提交会报错!
先给你理清楚问题根源:
你贴出来的那段脚本,是用来修改浏览器navigator.userAgentData的注入代码,正常来说它应该只出现在HTML页面里,结果某个环节的逻辑出错,把它写到了纯XML的sitemap文件里,直接破坏了XML的结构,Google自然就拒收了。
接下来咱们一步步定位解决:
排查Jekyll插件
打开你的_config.yml,看看plugins列表里有没有和UA模拟、页面增强,甚至是站点地图相关的插件。不少插件的注入逻辑没做页面类型判断,不管生成的是HTML还是XML,一股脑把脚本都塞进去了。你可以先临时禁用几个可疑的插件(比如名字里带UA、browser、inject的),然后跑bundle exec jekyll build,去_site目录里看生成的sitemap.xml有没有恢复正常,逐个排查找到搞事情的那个插件。检查主题的全局注入代码
如果你用的是第三方主题,去主题的_layouts目录下找head.html、footer.html这类全局引用的布局文件,看看里面有没有自动注入脚本的代码。很多主题会加这类增强脚本,但没过滤页面类型——比如生成sitemap这种XML页面时,也把脚本硬塞进去了。
你可以给注入脚本的代码加个Liquid判断,只在HTML页面里执行:{% if page.output_ext == '.html' %} <!-- 把原来的脚本注入代码放在这里 --> {% endif %}这样就能避免脚本跑到XML、JSON这类非HTML文件里了。
核对自定义sitemap模板
如果你是自己写的sitemap模板(不是用默认的jekyll-sitemap插件生成的),那仔细检查下模板文件(比如_sitemap.xml或者_layouts/sitemap.xml),有没有不小心引入了其他HTML模板的片段,或者误把脚本代码粘进去了。确保模板里只有纯XML的Liquid逻辑——比如遍历站点页面生成<url>标签,绝对不能有任何HTML标签或者脚本内容。本地构建后一定要验证
每次修改完,先在本地执行bundle exec jekyll build,然后打开_site/sitemap.xml用文本编辑器检查,确认没有任何<script>或者非XML的内容。也可以用XML校验工具检查格式是否合法,确认没问题再提交给Google站长工具。
核心问题就是“脚本注入逻辑没区分页面类型”,只要找到这个逻辑的源头,加上页面类型过滤,就能解决啦!
备注:内容来源于stack exchange,提问作者PatoFlamejanteTV

