Google不会抓取CDN文件


11

我注意到Google网站站长工具报告了我网站上很多被阻止的资源。现在,所有“被阻止的资源”都是我从Cloudfront CDN提供的.css,.js和图像(.jpg,.png)。

我花了很多时间进行测试,并试图找出Google为什么不抓取这些文件并报告“资源阻止”状态的原因。

目前,我从多个主机名提供这些文件,例如:cdn1.example.com,cdn2.example.com,...

cdn1,cdn2和其他名称是CCloud的Cloudfront发行名称。

测试:我尝试直接使用cloudfront发行版(无CNAME),但问题仍然存在。

目前,我的robots.txt如下所示:

# Google AdSense
User-agent: Mediapartners-Google
Disallow:

#Google images
User-agent: Googlebot-Image
Disallow: /

User-agent: *
Disallow: /homepage
Disallow: /index.php*
Disallow: /uncategorized*
Disallow: /tag/*
Disallow: *feed
Disallow: */page/*
Disallow: *author*
Disallow: *archive*
Disallow: */category*
Disallow: *tag=*
Disallow: /test*
Allow: /

以及在一个示例页面中阻止的文件示例:

  • cdn1.example.com/wp-content/plugins/wp-forecast/wp-forecast-default.css

  • cdn9.example.com/wp-content/plugins/bwp-minify/min/?f=wp-content/themes/magazine/css/font-awesome.min.css,wp-content/themes/magazine/css/response .css

  • cdn5.example.com/wp-content/themes/magazine/images/nobg.png

  • cdn6.example.com/wp-content/plugins/floating-social-bar/images/fsb-sprite.png

  • cdn5.example.com/wp-content/uploads/2013/11/Design-Hotel-3-80x80.jpg

  • cdn5.example.com/wp-content/uploads/2013/11/Marta-Hotel-7-270x225.jpg

我什至尝试允许robots.txt中的所有内容,但我总是得到相同的结果。

我也一直在仔细查看Amazon中的CloudFront设置,没有发现任何可能相关的信息(我从未使用过,也从未使用过以下选项:“限制查看者访问权限(使用签名URL或签名Cookie)”。

现在,我已经花了很多时间研究这个问题,没有更多的想法了。

有人可以想到导致Googlebot被阻止对Amazon CloudFront中托管的文件进行爬网的原因吗?


您是否检查过这些“受阻资源”的HTTP响应标头?GWT报告什么确切错误?如果它们被robots.txt阻止,则应报告此情况。
MrWhite 2015年

关于robots.txt文件的小注释...默认情况下,URL前缀匹配,因此不需要*在URL“ prefix”的末尾添加。/test*与相同/test
MrWhite 2015年

嗨,我无法检查标题,因为我不知道googlebot得到了什么。我只是收到消息:“ Googlebot无法获得该页面的所有资源。这是一个列表:”,然后是所有CDN托管文件(js,css和图像)的列表,并带有“原因”:“已阻止”。
tonelot

因为我要“获取并渲染”,所以我也看到渲染缺少样式和图像....
tonelot 2015年

另外,感谢您对robots.txt语法的注意。
tonelot

Answers:


7

因此,解决方案似乎是Amazon Cloudfront还评估了我的身份,robots.txt并以某种方式使用了与Google不同的语法规则。

我的工作版本robots.txt如下:

User-agent: Googlebot-Image
Disallow: /
User-agent: *
Disallow: /homepage
Disallow: /uncategorized
Disallow: /page
Disallow: /category
Disallow: /author
Disallow: /feed
Disallow: /tags
Disallow: /test

需要特别注意的一点是,它没有执行与以前完全相同的功能。实际上,我删除了所有空行,通配符和“ allow”指令。意味着最终结果是不一样的...但是我认为对我来说足够接近。例如,当在查询字符串中传递时,它不会排除标签页...

三个重要说明:

  1. 如果您正在使用此功能进行测试,请不要忘记robots.txt在每次迭代的Cloudfront发行版中使其无效。仅仅检查是否为您提供了最新版本是不够的。

  2. 我在任何地方都找不到robot.txt亚马逊Cloudfront可以理解的语法定义。因此,这是反复试验。

  3. 要测试结果,请使用Google网站管理员的“获取和呈现”工具及其移动友好的测试器(https://www.google.com/webmasters/tools/mobile-friendly/

我不明白Cloudfront为什么要验证和评估我的产品robots.txt。此文件对我和我的网站的爬网程序是“一笔交易”。亚马逊没有中间业务。和我在一起robots.txt只是愚蠢的。

我从未想到Cloudfront可能是我的第二robots.txt句猜测。


2

在存储桶中创建robots.txt。

为您的Cloudfront发行版创建另一个来源。

将存储桶的优先级设置为高于网站的优先级。

使您的网站在Cloudfront上的robots.txt无效。

完成上述操作后,Google会在抓取您的网站时读取网站robots.txt,而在您访问CDN的链接时,便会看到不同的robots.txt。


1

Google不会阻止使用主站点根目录中的robots.txt索引外部资源。使用子域,将CDN或其他域分类为外部域,因此,阻止内容的唯一方法是在CDN本身提供的文件上使用标头响应,或者在CDN或子域上使用robots.txt 。

使用:

#Google images
User-agent: Googlebot-Image
Disallow: /

应该只阻止本地图像,您将需要在CDN上执行相同的操作。

可能是标题响应问题,您应该对CDN上的一个文件执行“ CURL”。它看起来应该像这样:

HTTP/1.0 200 OK
Cache-Control: max-age=86400, public
Date: Thu, 10 May 2012 07:43:51 GMT
ETag: b784a8d162cd0b45fcb6d8933e8640b457392b46
Last-Modified: Tue, 08 May 2012 16:46:33 GMT
X-Powered-By: Express
Age: 7
Content-Length: 0
X-Cache: Hit from cloudfront
X-Amz-Cf-Id: V_da8LHRj269JyqkEO143FLpm8kS7xRh4Wa5acB6xa0Qz3rW3P7-Uw==,iFg6qa2KnhUTQ_xRjuhgUIhj8ubAiBrCs6TXJ_L66YJR583xXWAy-Q==
Via: 1.0 d2625240b33e8b85b3cbea9bb40abb10.cloudfront.net (CloudFront)
Connection: close

要注意的事情是:

HTTP/1.1 200 OK
Date: Tue, 25 May 2010 21:42:43 GMT
X-Robots-Tag: googlebot: noindex

嗨,谢谢您的回答。但是我的问题不是如何防止图像被索引。为避免混淆,我从robots.txt文件中删除了该文件,结果是相同的。Googlebot一直抱怨我在Cloudfront上托管的文件被阻止,我也不知道为什么。还有其他想法吗?miguel,感谢您的关注,miguel
tonelot 2015年

您想念的小姐,我知道您不希望它被阻止...因此,为什么我在底部说以确保您的标头响应没有在做X-robots-tag,您也说check the robots.txt on your CloudFront distribution我也这么说!再次提到,阻止CDN上索引的图像的唯一方法是CDN本身上的x-robots-tag和robots.txt。
西蒙·海特

1

发现了问题:CloudFront读取robots.txt并阻止提供内容,但是我想它解析了一些与机器人应该有的区别。

例如,robots.txt上的以下内容:

Disallow: */wp-contents/ Allow: */wp-contents/themes/

当Googlebot自行获取时,它会对其进行索引;当CloudFront读取它时,它不会考虑“允许”指令,并且禁止在内部提供任何服务*/wp-contents/themes/

简短的答案:检查您CloudFront发行版上的robots.txt,这可能是问题所在。无效并使用正确的版本更新它,它应该可以工作!


Cloudfront既不会“读取” robots.txt,也不会“考虑”其内容,也不会“防止”任何内容。请记住,什么从CloudFront的获得,当你拿到一个对象不能告诉你什么从另一个边缘位置提供的人会得到,如果他们的优势是原先的缓存或更新一个比你做。同样,前导通配符可能是导致意外行为的秘诀,因为机器人排除“标准”的标准不严格。
Michael-sqlbot

“ CloudFront读取robots.txt”-这是CloudFront本身托管的robots.txt文件吗?如果URL类似于问题中所述的内容,则“前导通配符”似乎也不必要。
MrWhite 2015年

你好 肯定是cloudfront正在读取我的robots.txt。并且绝对不接受与google相同的语法。我已经测试过取出robots.txt,但没有结果,因为我没有要求,并且在Cloudfront中无效。假定没有必要,因为我得到的是最新版本。测试需要很长时间,因为每次更改都需要一个失效请求,该失效请求要花很长时间才能完成。我会在几个小时后返回工作版本。我不知道为什么需要这种“聪明”。但是它在那里,我认为不应该。miguel
tonelot 2015年

我的apache上出现的同一robots.txt文件是一个云平台。我凭经验确定。
snagnever 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.