一、背景

SEO 应该是每个站长都会接触到的一个环节,其中 Sitemap 就是网站 SEO 中的一环。在近期,我将网站从 Wordpress 搬到了 Typecho 上,就在做到 Sitemap 这一环时,插件安装、启用都没有任何报错,但就是在执行访问验证时死活显示不出来(个别主题可能会跳转到 404 页面,如: Handsome 主题)。

为了搞定这个 sitemap.xml 可显示,弄到次日凌晨 4 点也没搞定,真是一把心酸一把泪...,次日醒来,再次处理,经过分析终于找到了头绪,并最终解决。

下面就将我的整个分析及处理过程分享给大家,希望各位Typecho站长少走弯路。

二、环境交代

三、异常现象

安装并启用 Sitemap 插件:

启用 Sitemap 插件

在浏览器地址栏访问:http://你的网站域名/sitemap.xml 查看 Sitemap 工作情况:

访问 sitemap.xml

可见什么都没有,一片空白...

注意:也有可能会跳转到 404 页面。

四、问题剖析

接下来用程序员思维走一波...

空白的页面真的是什么都没有吗?答案:不一定,也许是你要的答案已经处理好并请求到本地了,但缺少了某些东西没有显示出来。

如何验证?

第一步: 在 Linux 平台,使用 curl 命令工具请求页面,看看实际返回的内容。

可见实际上是有数据的,所以从这可以判断,上面的空白页可能是因为浏览器在请求 sitemap.xml 这个页面资源时缺少了某些东西,而导致最终没将数据展示出来。

接下来就验证...

第二步: 打开 Chrome 浏览器,按 F12 进入开发者模式,定位到 Network 栏,再次触发请求 sitemap.xml 资源:

可见在这个请求中,共触发获取2个文件,总 Status 字段可知,第一个文件请求成功了,第二步请求失败了。从第二个文件后缀可知,它是一个样式文件,在这里,它的作用就是将 sitemap.xml 文件中的数据进行格式化并在浏览器上展现出来,它的请求失败,也就导致了数据没发展现出来,所以我们在浏览器上啥也没看到。

接着,我们可以点击 sitemap.xml 文件,再次验证其内容是否被获取到:

sitemap.xml 请求结果

可见数据是有被获取到本地的。

知道大致问题了,那怎么去处理呢?

因为我不是这方面的开发人员,所以浏览器中提示的错误代码及如何针对性的去处理,这个我也不太懂。

为了获得更多的信息,我的做法是,再开一个浏览器(Safari),看看请求情况:

从上述信息可知,在 sitemap.xml 文件中嵌套了一个 sitemap.xls 的请求,而这个请求在实际中失败了,Safari 给出了失败的原因,大致意思是:加载 sitemap.xls 文件失败,要求请求的 域名、协议、端口等信息 需与 sitemap.xml 的一致。

知道错误原因后,回过来排查一下,其实不难发现,两个文件在请求 url 上确实是存在差异的,如下:

请求 URL 差异

接下来就是尝试解决问题了,既然是URL不一样,那我给请求 sitemap.xml 补充一个 www. 不就行了吗,说干就干,来看看效果:

可见问题已解决。

注意:这个 www. 需要根据你实际情况调整,如果你用的是其它二级域名,请根据实际情况调整(测试:使用二级域名不存在这个问题)。

五、问题解决

知道问题所在了,接下来解决就好办了,方法有如下几种:

第一种:直接使用带 www. 方式访问,在各大搜索引擎上提交时,直接提交正确、可访问的、带 www. 的 sitemap.xml 链接即可!

第二种:修改后台站点地址, 操作:设置 --> 基本 --> 站点地址 ,修改为不带 www. 的链接。

第三种:在 Nginx 中设置,将所有请求从定向到带 www 的域名上。(过程稍复杂,操作略)

第四种:到 Sitemap 目录下找到 sitemap.xls 文件,将上述请求的 url 代码屏蔽,直接忽略格式化。(毕竟这是给搜索蜘蛛看的,只要蜘蛛能理解就行,平时我们很少看。)

第五种:Bug修复,如果你是大神,请直接修复这个问题,万分感谢!

六、小结

排查和修改故障的过程是痛苦的,特别是什么都不懂的情况下。如果排查了很久也无果,请停下来,休息一下,说不定下次归来就有头绪,问题就迎刃而解了呢...

关于这个问题,个人猜测如果你使用的是二级域名,在使用Sitemap这个插件时,应该不会有这个问题,但实际还待验证。本人就验证了,如果你恰巧是这种情况,可在评论区提交你的使用。

好了,就这样吧,不逼逼了,累...

最后提醒:教程请勿生搬,应结合实际情况,适当调整。

最后修改:2021 年 06 月 27 日 06 : 02 PM