2

这是我网站的 sitemap.xml 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

  <url>
    <loc>http://example.com/</loc>
    <lastmod>2013-04-02T12:45:31+00:00</lastmod>
    <changefreq>daily</changefreq>
    <priority>1</priority>
  </url>

  <url>
    <loc>http://example.com/2013/wordpress-customize-login-page/</loc>
    <lastmod>2013-03-01T12:06:00+00:00</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>

</urlset>

是原始站点地图。首先,我确定了有效的 XML 标记,然后在xmlchecksitemapxml上检查了我的站点地图。

两个站点地图验证器给出了这个错误:

Fatal Error 4: Start tag expected, '<' not found in http://example.com/sitemap.xml on line 1 column 1

在我看来,什么都没有。不知道我做错了什么。(谷歌搜索也没有帮助。)

4

3 回答 3

4

问题必须与服务器的某些设置有关- 端口阻止/代理设置/安全设置。我将您未更改的站点地图文件复制到了我的服务器,两个验证器都读取并验证了它。这就是我能告诉你的全部。但您可以肯定,问题不在于您的 XML 代码。

于 2013-04-02T13:53:18.527 回答
3

更新:如评论中所述,有问题的站点地图验证器在解析压缩站点地图时遇到问题(在 OP 的情况下,Amazon S3 仅提供压缩文本响应)。


我现在在认为这是服务器问题的阵营中,但我有一些数据可以支持(所以我没有编辑其他答案)。这就是我所做的(我关于“更有效”的原始观点仍在下方):我复制了您的文件(在浏览器中查看源代码)并创建了一个 sitemap.xml 并将其上传到我的 S3 存储桶(并确认所有这个问题中提到的验证器认为它是有效的)。然后我用来WGET获取您的站点地图和我复制的站点地图,这就是我发现的(用我的存储桶名称隐藏,[myexamples3bucket.example]但您可以看到它是一个 AWS IP 地址):

:~# wget http://[myexamples3bucket.example]/original.xml
--2013-04-02 13:26:42--  http://static.gnld.com/original.xml
Resolving [myexamples3bucket.example]... 207.171.189.80
Connecting to [myexamples3bucket.example]|207.171.189.80|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4578 (4.5K) [text/xml]
Saving to: `original.xml'

100%[======================================>] 4,578       --.-K/s   in 0.002s

2013-04-02 13:26:42 (1.97 MB/s) - `original.xml' saved [4578/4578]

然后我尝试获取您的站点地图:

:~# wget http://aahank.com/sitemap.xml
--2013-04-02 13:26:55--  http://aahank.com/sitemap.xml
Resolving aahank.com... 178.236.4.60
Connecting to aahank.com|178.236.4.60|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 766 [application/xml]
Saving to: `sitemap.xml'

100%[======================================>] 766         --.-K/s   in 0s

2013-04-02 13:26:55 (144 MB/s) - `sitemap.xml' saved [766/766]

这两个文件的内容非常不同。虽然“复制的”站点地图看起来完全符合您的预期,但您的原始站点地图如下所示:

^_�^H^@^@^@^@^@^@^CÍM�Ú0^P����^_^P×j��^O>,����=�J�ï¿ï¿½^Rq��1�^XY�Lnw���^R�^V�l
                           �jO$+U���:z�s�i�2V�Ë���u�]��Þ8_;����EcÑ9È[�M����^BwJjhw��-�4^Z^\ZJ��0I^O�0^Q�!���9��^^^]�1;^N�^]����Ǫ^Z̪^_��˪ڪB$Aɪ^M�^DmHcT-
�Ns,ªAÚª^Z�a�T�XÄV5��^[^^����A�F9^KTpÆÖe�AÔ���2È^_�$

这表明 AmazonS3 是罪魁祸首。我提供这个,以防其他人知道如何解决这个问题。祝你好运!


至于更有效,使用有效站点地图的官方定义,我对您的站点地图进行了以下(小)更改,将其上传到我的 S3 存储桶并针对您链接到的两个站点进行了测试,并且它现在通过了:

<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
        xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

其他一切都没有改变。这两个站点上的错误消息非常无用,但我添加的重要一点是xmlns:xsi应该xsi:schemaLocation通知验证器预期的格式。我认为这些是由爬虫假定的,但在两个链接服务的情况下,缺乏这些属性在技术上会使文档无效。

于 2013-04-02T18:07:28.530 回答
0

对我来说,问题是 UTF-16,切换到 UTF-8 并且它起作用了。

于 2021-05-09T09:29:32.850 回答