期望开始标记,'<'在sitemap.xml中找不到 - 不确定是什么问题

时间:2013-04-02 12:58:36

标签: xml validation sitemap xml-validation

这是我网站的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>

这是the original sitemap。首先,我确认valid XML markup,然后在xmlchecksitemapxml上检查了我的站点地图。

两个站点地图验证程序给出了此错误:

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

在我看来,没有什么遗漏。不确定我做错了什么。 (谷歌搜索也没有帮助。)

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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


我现在在营地认为这是一个服务器问题,但我有一些数据要支持(所以我没有编辑其他答案)。这就是我所做的(关于“更有效”的原始观点仍在下面):我复制了你的文件(在浏览器中查看源代码)并创建了一个我上传到我的S3 Bucket的sitemap.xml(并确认了所有在这个问题中提到的验证器认为它有效)。然后我使用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是罪魁祸首。我提供这个以防万一其他人可以弄清楚如何解决这个问题。祝你好运!


至于更有效,使用the official definition有效的站点地图,我对您的站点地图进行了以下(小)更改,将其上传到我的S3 Bucket并针对您的两个站点进行了测试已链接到,现在通过:

<?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:xsixsi:schemaLocation,它应该通知验证者预期的格式。我认为这些是由爬虫承担的,但在两个链接服务的情况下,缺少这些属性在技术上会使文档无效。

答案 2 :(得分:0)

对我来说,问题是 UTF-16,切换到 UTF-8 并且有效。