谷歌索引Cloudfront分发

3
我有一个通过Cloudfront具有S3来源和通过Route 53的自定义域名的静态网站。一切正常,但是Google也将Cloudfront分发URL(d123etc.cloudfront.net)以及我的自定义域名索引,导致重复内容问题。
我尝试了规范的URL,但是分发仍然被索引。建议根据使用的域名提供不同的robots.txt,听起来很好,但没有.htaccess或Web服务器,因此需要Lambda Edge函数尝试发送不同的robots.txt。
问题在于我找不到如何在函数中确定请求是来自我的自定义域还是直接分发URL。我尝试过白名单源,但是在使用S3源时不会发送它。我还尝试过白名单Referer标头,但是由于是直接请求,因此不会发送任何referrer,当访问robots.txt文件时。
目前,我在页面加载时使用js添加元素noindex客户端端(我意识到这太晚了),并且还在客户端端重定向到我的实际域,以防某人按照谷歌索引的cloudfront.net域名。
有没有人知道如何在Lambda Edge中检测使用哪个域名进行请求?或者其他阻止Google索引Cloudfront URL的方法,只留下它索引自定义域名。

你有检查请求中的 Host 头吗? https://docs.aws.amazon.com/zh_cn/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html - MarcC
2个回答

0

所以我认为做这件事的方法是在您托管的Web服务器上设置重定向。如果您检查请求头中的“host”并检查是否为cloudfront.com,那么请发送一个301响应代码以及您的自定义域名。

S3有一种UI方式来完成这个:

https://medium.com/tensult/how-to-do-site-redirection-using-aws-522a4002c645

似乎你需要在相同的CloudFront URL后面再添加一个新的存储桶,但不带自定义域名。然后你可以设置它将所有请求重定向到你的自定义域名。
浏览器或机器人将停止尝试cloudfront.com,因为它没有返回任何内容,它们会自动(用户几乎察觉不到)重定向到我的domain.xyz,并且所有的链接都将指向你自己的域名。

谢谢。我已经设置了相关的CNAME和A记录别名,所以Google知道我的自定义域名。但这并不意味着直接访问CloudFront域名是无法访问的,而且似乎没有办法将其从Google索引中删除,除非我能够在CloudFront域名上提供一个阻止robots.txt文件,同时在我的自定义域名上提供一个正常的robots.txt文件。 - peterorum
嗯,说得好。你对于你的CloudFront域名的DNS区域有控制权吗? - Sydney Y
不好意思,如果我理解问题正确的话,我认为不是这样的。cloudfront.net是亚马逊所有的。 - peterorum
1
cloudfront.com是一个云服务平台,但他们会为你分配一个独特的子域名,这样你就可以为该子域名设置记录。我会进一步调查一下。 - Sydney Y
希望在问题中已经解释清楚了,没有Web服务器。没有Apache,没有.htaccess,也没有Express。只是一个通过CloudFront分发的S3存储桶上的静态网站。通常使用Lambda Edge函数来处理这种类型的请求。但是我无法确定请求来自哪个域名。这就是问题所在。 - peterorum

0
我最近遇到了类似的问题,尽管我使用的是Web服务器而不是S3。这似乎是Google机器人的一个非常罕见的怪癖。
它可能唯一可能了解CloudFront URL的方式是通过DNS查询。我有一个CNAME DNS记录指向该分发,所以看起来是这样的。
> nslookup site.com
Non-authoritative answer:
site.com  canonical name = dfsdfsdfsdf.cloudfront.net.
Name:   dfsdfsdfsdf.cloudfront.net
Address: xx.xx.xx.xx

所以我切换到了一个ALIAS A记录,现在是这样的:

> nslookup site.com
Non-authoritative answer:
Name:   site.com
Address: xx.xx.xx.xx

我不确定这是百分之百的防弹,但这是我唯一的线索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接