最近明月得谷歌 AdSense 账户后台总是显示一条“收益受损风险 - 您需要修正一些 ads.txt file 问题,以免收入严重受损。”的提示已经好多天了,这两天抽空解决了一下,期间在跟站长交流的时候发现不少站长都有一个关于域名解析得误区,给站点带来了很大得安全隐患,正好借助于这个 ads.txt 问题给大家讲解一番。
首先,谷歌 AdSense 出现“收益受损风险 - 您需要修正一些 ads.txt file 问题,以免收入严重受损。”这个提示的原因其实很简单,就是谷歌 AdSense 的爬虫无法抓取到站点根目录下得 ads.txt 文件了,至于说这个 ads.txt 文件是干嘛的,有兴趣得站长可以参考【免 AdSense 广告收益受损的 ads.txt 文件】一文了解即可。那么就有站长提出自己网站根目录下明明有这个 ads.txt 文件呀?为啥谷歌 AdSense 依旧这么“顽固”的提示这个问题呢?
先说说如何解决谷歌 AdSense 这个提示
很明显这不是谷歌 AdSense 的错,原因可能就出在我们站点域名的 DNS 解析上,新手站长们和谷歌 AdSense 理解的“站点根目录”存在差异,一般我们理解的“站点根目录”是类似www.mysite.com/这样的,谷歌 AdSense 所谓得“站点根目录”其实是mysite.com/这样的,细心得站长们可能发现就是少了一个www.而已,可不要小看少了这个www.,理论上 www.mysite.com 和 mysite.com 对于搜索引擎来说是两个站点:mysite.com 是主域名站点,www.mysite.com 是个二级域名站点。虽然我们习惯性并且经常想当然的把 www.mysite.com 当作我们的站点域名来使用,但依旧改变不了 mysite.com 才是我们主域名的事实,至于为什么主域名前面加 www,大家可以自行百度、谷歌一下“万维网”脑补,明月就不再赘述了(实际是解释万维网真的是太暴露年龄了!╯□╰)。
分清楚了主域名和二级域名我们再来看谷歌 AdSense 这个有关 ads.txt 的提示就明白如果你是用 www.mysite.com 作为站点域名的话,那么看到谷歌 AdSense 这个提示基本就断定是谷歌 AdSense 请求 mysite.com 主域名访问 ads.txt 出错了,也就是 mysite.com/ads.txt 这个网址访问存在异常。原因就是你在做域名 DNS 解析的时候主域名解析没有设定好。这个“没有设定好”有很多含义,当我们需要将域名解析给指定的站点服务器的时候都是 A 解析到 IP 地址即可,主域名和二级域名解析举例如下:
- @做 A 解析到服务器 IP,对应域名形式 mysite.com
- www 做 A 解析到服务器 IP,对应域名形式 www.mysite.com
这就是常见站点域名 DNS 解析的方法,这种解析可以无论 mysite.com 还是 www.mysite.com 访问都可以到达你的站点,为了 SEO 优化的需要,一个站点只使用一个域名才是正理,因为在搜索引擎看来主域名和二级域名是两个站点,所以我们会根据自己的喜好在主域名和 www 二级域名里优先选择一个作为站点主要域名使用,无论选择哪个都必须保证另一个可以自动跳转重定向到优先使用的域名上,因为约定俗成的原因,我们就以优先使用 www.mysite.com 为例,这个时候就要保证 mysite.com 的访问请求可以自动跳转重定向到 www.mysite.com,这种叫做 301 重定向跳转,搜索引擎是支持和允许这种重定向跳转的,一般 301 重定向可以借助站点服务器上 Web 服务器应用来实现,不少站长们都忽略了这一步造成自己得站点 mysite.com、www.mysite.com 都可以访问,这对搜索引擎来说就是一个站点两个域名了,这样站点域名的权重就被分散了,对站点 SEO 是很不利的。明月的博客选择的就是以 www.imydl.com 为主要域名的,造成谷歌 AdSense 这个提示就是因为疏忽忘了给 imydl.com 也做 DNS 解析了,没有 DNS 解析即使 Web 服务器里做了 301 重定向依旧是 imydl.com 请求失败,这个疏忽主要是从更换 DNS 解析服务 CloudXNS 到阿里云 DNS 期间造成的,所以近期谷歌 AdSense 有了这个提示,理解了这些解决谷歌 AdSense 这个提示也就很简单了,无非就是在 DNS 解析里做个@值的 A 解析到服务器 IP 即可。一般完成解析 24 小时候谷歌 AdSense 这个提示就消失了也就表明成功的解决了。
再说说启用了 CDN 后如何做域名的解析
上面是解决了谷歌 AdSense 的警告提示,很多站长都知道明月一直都很推崇给站点使用 CDN,一是可以提升站点访问速度,二是隐藏站点服务器真实 IP 以提升站点服务器的安全。不少站长在使用 CDN 的时候总是忽略今天讲到的这个主域名和 www 二级域名的问题,看似两个都解析有点儿多余,其实不然,因为你没法保证用户只用主域名或者 www 二级域名访问站点,并且从输入效率上来说主域名访问更快捷,不是嘛?所以为了保证兼容性和用户体验甚至对搜索引擎的友好度这是必须要做的,即使用了 CDN 也要这样做。
在给站点启用 CDN 时比较常用的方式就是 CNAME 方式了,也就是在 DNS 解析服务里将 A 解析更换为 CNAME,解析记录由 IP 更换为 CDN 提供的 CNAME 值,IP 地址提交给 CDN 作为回流源。今天要给大家强调的就是在使用 CDN 的时候主域名和 www 二级域名都要放到 CDN 里,这样做的主要原因就是可以保证真正隐藏了服务器真实 IP,主域名和 www 二级域名不能共享一个 CDN 的 CNAME 值,原因还是“主域名和 www 二级域名理论上是两个站点”这条铁律,也就是说在 CDN 里添加一个主域名 mysite.com 了还要添加 www.mysite.com 二级域名,哪怕 IP 源站是一样得!通俗点讲这样做的好处就是“头尾兼顾”,否则就是“顾头不顾腚”,那就很尴尬了也很不安全!有点儿绕,大家慢慢理解吧!
Nginx 里如何实现主域名和 www 二级域名的 301 重定向
因为今天讲的这个很抽象,所以很多站长们可能一时理解不了,明月建议大家理解与否都要做好这方面的工作,以后慢慢理解就是了,因为这涉及站点 SEO、服务器安全很多方面。所以为了方便大家死搬硬套,特分享一下 Web 服务器 Nginx 下实现主域名和 www 二级域名的 301 重定向配置方法,大家只需要将里面得域名更换为自己的域名放到对应的 Nginx 站点配置文件里即可。
如果你的站点是 HTTP 协议的话,只需要将下面得配置代码添加到 Nginx 站点配置文件 sever 模块里即可,具体位置建议在 server_name 语句行下面,如:
- server
- {
- listen 80;
- #listen 443 ssl;
- server_name mysite.com www.mysite.com;
- #301 跳转
- return 301 http://www.mysite.com$request_uri;
- #下面这个 location 可要也可不要,自己看着办吧!我感觉没有影响
- location / {
- return 301 http://www.mysite.com$request_uri;
- }
-
- if ($host != 'www.mysite.com' ) {
- return 301 http://www.mysite.com$request_uri;
- break;
- }
- #以下省略……
- }
这样就可以实现浏览器地址栏里输入“mysite.com”后自动跳转到“www.mysite.com”了。
Nginx 的站点配置文件是非常灵活得,一个配置文件里可以有多个 server 块,只要是不同 listen 端口或者 server_name 即可,上述代码就可以根据 server_name 分拆为两个 server 块,一个 server_name 为 mysite.com,一个 sever_name 为 www.mysite.com,这时候我们得 301 跳转代码就可以放到需要跳转的哪儿个域名 server 里了,如下:
- server
- {
- listen 80;
- #listen 443 ssl;
- server_name mysite.com;
- #301 跳转
- return 301 https://www.mysite.com$request_uri;
- #下面这个 location 可要也可不要,自己看着办吧!我感觉没有影响
- location / {
- return 301 http://www.mysite.com$request_uri;
- }
-
- if ($host != 'www.mysite.com' ) {
- return 301 http://www.mysite.com$request_uri;
- break;
- }
-
- }
- server
- {
- listen 80;
- #listen 443 ssl;
- server_name www.mysite.com;
- #以下省略……
- }
如果你的站点是 HTTPS 的话,首先需要在 listen 80 的 server 里(如果没有可以参考上面 HTTP 的代码添加一个)添加如下代码:
- #301 跳转
- return 301 https://www.mysite.com$request_uri;
- location / {
- return 301 https://www.mysite.com$request_uri;
- }
-
- if ($host != 'www.mysite.com' ) {
- return 301 https://www.mysite.com$request_uri;
- break;
- }
记住上述代码是添加在 listen 80 的 server 里哦!
这是实现浏览器地址栏里输入“mysite.com”后自动跳转到“https://www.mysite.com”的。
然后在 listen 443 的 server 里 server_name 行下面添加如下代码:
- #301 跳转
- if ($host != 'www.mysite.com' ) {
- return 301 https://www.mysite.com$request_uri;
- break;
- }
这是实现“https://mysite.com”跳转到“https://www.mysite.com”的。
这个跳转主要是为了应对启用 HTTPS 并加入了 HSTS Prelod List 需要得,有兴趣的可以参考【加入 HSTS Prelod List 让你的域名「嵌入」主流浏览器,一同发行!】一文。
上面的大家可以举一反三实现 www.mysite.com 自动跳转到 mysite.com 的形式,也就是以主域名为主要站点域名的。
对于老站长来说可能今天说的这些都非常的简单,从谷歌 AdSense 的 ads.txt 提示开始啰嗦了这么多其实主要是为了让新手站长们不要在域名解析和跳转上走弯路,明月发现不少站长们在这方面的都是一知半解甚至是不明所以,这给站点带来了很大的安全隐患,还会造成搜索引擎收录时间延长的问题,希望可以帮到大家!谢谢大家长期以来的支持!
目前明月的谷歌 AdSense 后台的有关 ads.txt 的提示已经消失了!