禁用或绕过 Googlebot 的功能检测(同时为爬虫提供 JS 应用)

我一直在尝试让 Discourse 完全为 Googlebot 提供 JS 应用程序——进展非常顺利。

@pfaffman 的帮助下,通过在 rails 控制台中执行以下代码,我能够在使用 Chrome 并将用户代理伪装成 Googlebot 或 Googlebot 智能手机时显示 JS 应用程序。

SiteSetting.non_crawler_user_agents="trident|webkit|gecko|chrome|safari|msie|opera|goanna|discourse" + 'rss|bot|spider|crawler|facebook|archive|wayback|ping|monitor|lighthouse'

但是,当我在Google 移动友好测试工具(或 Google 搜索控制台中的网址检查)中进行测试时,它会显示一个空白屏幕截图,其中包含以下 HTML:

必应也类似,但必应会显示内容。我认为必应显示内容是因为它的爬虫不是“移动”的。相关帖子在此,由 @sam 发布。

根据 @david这篇帖子的说法,“功能检测”似乎是罪魁祸首。

我谨慎乐观地认为有一个简单的解决方法。在使用该工具的 10-20 次尝试中,Googlebot 会正确渲染应用程序。

我的理论是,由于 Googlebot 以不下载页面上的所有资源而闻名,因此该特定的 JS(包含功能检测并导致回退)未被加载,因此页面看起来不错。

所以总而言之,如何禁用 Googlebot 的功能检测(或者如果更容易,禁用所有爬虫/机器人)?

编辑 只是以防万一我的术语有误,当 Meta 上提到“功能检测”时,它指的是浏览器检测吗?(也许使用像 browser-detect.js 这样的文件和其他依赖项)

或者“功能检测”是 Discourse 在尝试了解访问应用程序的技术时所做的行为的宽泛说法?

您想为 Googlebot 提供 JS 版本的原因是什么?Google 可能找不到分页列表视图,包括分页主页和帖子数量超过一定数量的主题。在机器人视图中,主题列表是可抓取的,但 Googlebot 可能不会触发无尽滚动。

很高兴您问了,是的,我认为这就是我的 Google“软性处罚”的原因

请允许我详细说明。

我们在 2019 年 9 月/10 月左右进行了非常糟糕的网站更新,主站当时就崩溃了。

我们从未恢复。就 SEO 而言,该网站从未像现在这样好过。当然它并不完美,但我们比一些竞争对手领先很多。使用我们许多年前的图片和文字的网站的排名比我们高。我们在第三页,而他们可能在第二页的顶部。

我浏览了无数的 SEO 博客、视频、帖子,甚至还与 John Mueller(在 Reddit 上)进行了一些来回交流。

我从他那里得到的最多的信息是,这可能是“质量问题”。自今年 1 月 1 日以来,我们已经极大地改进了主站。有机流量甚至没有一丝波动。

Discourse: 我在 2013 年安装了它,然后就忘了它。几乎不会查看它的流量。

如果您查看主站分析,您会看到图表末尾有一个急剧下降。这时我开始处理 Discourse。

在 Discourse 上尝试 prerender.io 时,主站的排名变化很大。有时一夜之间会跳升 10-15 位,然后又回落。(我后来停止使用 prerender,因为它们无法渲染主菜单、登录等)

根据我在网上看到的信息,这是 Google 不知道如何定位您的迹象。他们说只要“多”一点,您就能在算法中占据有利位置。

在过去的 3 年里,我们所做的任何事情都没有引起 SERP 中的这些波动。

(捣鼓 Google 拒绝工具、清理代码、干净的 URL、站点结构、内部链接、社交、内容等)

您可能会争辩说,为什么 Google 在 2018 年没有惩罚我?(那时您也在子域上运行 Discourse)

嗯,我认为这是由于该网站、其历史、链接配置文件等多种独特因素造成的,导致它在 2019 年底崩溃。似乎 Google 重新洗牌了网站排名,并且可能给予 Discourse URL 比以前更多的权重。

而且关键是……我喜欢 Discourse。尤其是我现在更多地使用 meta,所有这些很酷的插件和功能我以前都不知道它们的存在。Wiki、订阅付款、目录、以及现在的聊天!!

所以,离开 Discourse 并不是一个真正的选择,现在投入太多了。

我确实考虑过这一点,并且愿意冒险一试。我知道它不会完美,但根据我所读和所看,Google 近来在理解 JS 方面已经非常出色了。

他们甚至弃用了 ajax 爬行方案

时光飞逝。如今,只要您不阻止 Googlebot 抓取您的 JavaScript 或 CSS 文件,我们通常就能像现代浏览器一样渲染和理解您的网页

题外话: Discourse 有一个 ajax 爬行设置——我想这最终必须取消


所以计划是向 Google 提供应用程序,尽我所能修复可能出现的任何 SEO 问题,并享受流量的激增。

然后,我可以在 meta 上报告结果,并论证 Discourse 应该考虑优化 JS 以适应 Google。

例如,也许像这样(来自 Google 博客)的东西可以帮助解决分页和滚动问题。

并为旧浏览器保留非爬虫版本。

如果我能补充一点…… :smirk:

在我把 JS 版本发送给谷歌之前,我一直在捣鼓它。

我记得 大约在四月初 左右测试过将 JS 版本发送给谷歌。我记得它(即使看起来很糟糕)大多数时候都能返回一个结果。使用的是谷歌移动工具。

我曾以为是 这个提交 —— 我修改了代码,重启后行为还是一样。

也许有人记得过去几个月里有哪个 PR 或提交可能改变了浏览器和/或爬虫检测?

编辑 抱歉更新这么多,信息越多越好,对吧?

上个月尝试使用 prerender 时,谷歌最终为论坛覆盖添加了 2000 个网址。(主要是这些网址

它们都在 0.005 秒内被提供,prerender 已经缓存了网址,并准备好供 googlebot 访问。所以它很快地获取了所有这些网址。

重点是,也许爬虫已经“非常习惯”了没有 JS 的情况,并投入了资源来获取这 2000 页。

所以现在它以这种方式访问网站,直到它弄清楚(并且需要更多地使用 JS 访问)—— 这只是一个理论。

你是在处理一些改变 Discourse 被抓取方式的事情吗?比如尝试使用 prerender?

如果你在 GA 中查看着陆页报告,它是否能提供关于网站哪个部分受到影响的线索?


对于主网站,如果 John Muller 建议存在质量问题,我会查看他们的质量文档,并问自己是否有任何一条适用于你。

从快速浏览来看,你的 2019 年网站存在重定向链,这可能“超过了 Google 的抓取长度限制”(https://old.reddit.com/r/bigseo/comments/errudz/hello_everyone_we_have_migrated_our_blog_from/ff5lbwa/?context=3)。

一个可能导致突然受罚的原因是,2019 年网站的网址有 6 个重定向,但 Google 建议“少于 5 个”,否则他们可能不会跟踪重定向。这可能让 Google 认为旧页面已从网上消失。

示例:

curl -sSL -D - http://flynumber.com/virtual-phone-number/united-states_alexandria_1-318 -o /dev/null -H 'User-Agent: header_bot'

重定向可能是最容易修复的。与其这样做:

/a/b/c/d/e/final-destination

我建议这样做:

/a/final-destination
/b/final-destination
/c/final-destination
/d/final-destination
/e/final-destination

(看起来你还有门页自动同义词化,但我建议先尝试修复更简单的问题,因为这可能就足够了。)

谢谢你,乔希,很感谢你的反馈。

抓得好,虽然执行不力,耗时数月,但谷歌似乎已经弄清楚了哪些页面代表什么。

换句话说,最终,我开始看到我 301 重定向到旧页面关键词的页面越来越多。

这很有道理,我会看看如何实现——目前搜索控制台并没有经常显示爬虫进行 301 重定向。似乎当排名提高时,它们会更多地遵循 301。这可能是因果关系而非相关性。


这完全不是对 Discourse 的批评——我只是不太相信“成千上万的 Discourse 用户拥有出色的自然流量”。

谷歌也不会真正告诉我们。

我们必须永远记住,谷歌是一个算法,它们不是从人类的视角来看待这个问题的。

虽然两个版本共享相似的内容,谷歌也知道这并非恶意伪装——但它们仍然需要调整排名。

一个版本看起来好得多,运行得更好,并提供了一定的内部链接结构。另一个只是一个华丽的 RSS 源。

谷歌根本不知道我有一个很棒的论坛,它可以在所有[现代]设备上运行,真正鼓励讨论,并且是互联网上最酷的东西之一。

我总是喜欢使用“Powered by discourse” do-follow 链接在爬虫版本中。(仅仅因为它很简单)

再说一遍,我知道这不是恶意的,但你必须从谷歌的角度来看待它。你 FlyNumber(而不是 https://community.cloudflare.com/)给我们提供了这个爬虫版本,其中包含一个外部链接,而你没有向普通浏览器显示这个链接。

我完全可以看到算法注意到正在发生的事情,并忽略 Cloudflare 域的外部链接(因为它是如此权威)。

谷歌应用于 Cloudflare 的规则不会应用于我。

有人付钱让你提供这个你展示给机器人(但不想展示给普通用户)的外部链接吗?这更多是关于他们可能如何看待这个网站。我并不是说就是这样——但这是你想排除的一种可能性。

最简单的说法是,爬虫版本没有菜单或任何真正的结构。

这是算法认为你想为最终用户提供的内容。

从非常普遍的角度来看,我看不出算法会奖励这种行为。

也许是时候开始考虑真正大修爬虫版本了。至少添加主菜单和底部的推荐主题。

有趣的更新谷歌在我的 discourse 实例的抓取统计数据中添加了“JSON”到“文件类型”中。“Javascript”是一个单独的“文件类型”。

我会密切关注,但仍然希望它能在谷歌工具中正确渲染。

我开始认为我的逻辑从一开始就是错误的。这可以解释为什么没有人回应——也许根本没什么问题。

这是一篇关于谷歌在截图中显示空白页是正常现象的新文章:

我现在可以看到主页的“抓取”HTML,这是索引版本,而不是来自“实时测试”——它显示了完整的页面。请记住,谷歌在为他们提供完整的 JS 应用时就弄明白了这一点。

有趣的是,就索引而言,他们向下滚动到了主页上的大约第 27 篇文章。所以无限滚动是谷歌能够理解的东西。

我不确定这是否有帮助,但我取消了管理员设置中的 ajax 选项。这导致谷歌找到了如下所示的 URL(并提供了爬虫版本)——我取消了它,现在该 URL 将显示 JS 版本:

https://discuss.flynumber.com/t/japan-phone-numbers-disconnect-notice/2351?_escaped_fragment_=

现在我只需要弄清楚如何清理 由 discourse 为用户页面创建的额外的规范化 URL。

在为 discourse 的 SPA(完整 JS 版本)提供服务至少一个月左右后,我又回到了爬虫版本。

你可以参考我的帖子历史记录,我曾认为 Google 可能会理解 JS 版本并比爬虫版本更好地对其进行排名。我错了。

@j127,你说得对!(我会给你发私信的,好先生)

看起来 Google 确实找到了这个网站,但排名差不多(如果不是略低的话)。

爬虫版本在四月/五月也更新了链接颜色、格式等,这很有帮助。

在我看来,如果我们能在爬虫版本中添加一个简单的菜单和“推荐话题”,将对大家的 SEO 产生很大的影响。

除此之外,我只是想把这个信息分享出来,以防有人好奇。

大家做得很好!

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.