neounix
(Dark Matter)
1
Discourse 应用中存在一个与更新 Discourse DOM 的 <head> 部分中的 <link rel="canonical"> 元数据元素相关的错误。
基本上,当浏览器客户端进入应用并首次加载应用时,<link rel="canonical" href=""> 元素会根据该初始页面加载进行设置;但当用户在应用内点击(正常用户行为)且未手动刷新页面时,<link rel="canonical"> 链接不会更新。
我已在 meta 站点上测试并复现了此错误:
图 1. 从主页进入 meta 站点,规范链接正确,标题元素也正确。
图 2. 访问一个主题。标题元素正确更改,但规范链接不正确(未按预期更新)。
图 3. 访问另一个主题。标题元素正确更改,但规范链接不正确(未按预期更新)。
对 SEO 的影响
此错误可能对 SEO 产生不利影响,因为当 Google 索引页面时,如果 Googlebot 未对每个页面进行“硬刷新”,则每个页面的规范信息将不正确(如上图像序列所示)。
可复现性
我已在 meta 站点和我们的站点上 consistently 复现了此错误。
备注
我曾在其他 Web 框架(不仅限于 Ember)中遇到过类似的 node.js(单页应用)生命周期问题,即基于 Web 应用框架(如 Ember 和其他单页应用框架)的生命周期钩子,DOM 元素未能正确更新。
1 个赞
Falco
(Falco)
2
这种情况永远不会发生,因为我们不为 Googlebot 提供 SPA。你也可以将 User Agent 设置为 GoogleBot UA 来查看其工作原理。
4 个赞
neounix
(Dark Matter)
3
你好 @Falco
谢谢你的回复。
是的,当 User-Agent 设置为 GoogleBot 时确实没有问题(已确认)。
我同意,既然你没有向 GoogleBot 提供单页应用(SPA),这可能不会对 SEO 造成影响,但这仍然是 SPA 中的一个漏洞。
此外,我还需要考虑不向 GoogleBot 提供 SPA 所带来的影响。
谢谢你告诉我这个“小事实”……
(注:我之前并不知道“推荐主题”不会提供给 GoogleBot,但现在我知道了……谢谢你的告知)。
1 个赞
Falco
(Falco)
4
我们为网络爬虫提供完全不同的文档,因为并非所有爬虫都能运行 JavaScript,我们希望 Discourse 也能让这类客户端访问。即使它们获得的功能有所减少,仍能获取所有内容。
5 个赞
neounix
(Dark Matter)
5
非常感谢您的告知。
现在我意识到,之前关于单页应用(SPA)、“无限滚动”以及其他 SEO 相关问题的讨论完全有误,因为 GoogleBot 并不会接收到 SPA 内容。
这改变了我对最近编写的一些自定义代码的处理方式;现在我知道了需要在控制台中使用 GoogleBot 用户代理进行检查。
非常感谢您的指点,@Falco!感激不尽。
问题:
将单个自定义 JavaScript 文件添加到渲染给 GoogleBot 的 HTML 中的最佳方法是什么?
是否有“标准方式”来修改提供给机器人的 HTML?
我询问的原因是,我们有一些自定义代码是在我为机器人编写的插件中创建的;但我已在控制台中使用 GoogleBot 用户代理进行了检查(再次感谢您提醒我需要进行这项操作),发现 GoogleBot 并未加载任何该自定义插件的代码。
1 个赞
neounix
(Dark Matter)
6
在此期间,由于我无法在面向爬虫的 HTML 的(基于 Handlebars 的)插件中实现所需功能,我们决定暂时从 Discourse 中移除规范标签(canonical tags),这是一个临时的部分解决方案,直到我找到如何通过 JavaScript 为网络爬虫修改规范标签的方法。
Discourse 在容器 yml 文件中提供了针对此类变更的便捷机制,因此我今天正是这样操作的。
我非常感谢 Discourse Meta 社区指出,Discourse 应用向(已识别的)爬虫提供的页面与向用户提供的页面并不相同。
请注意,我并不向其他 Discourse 系统管理员推荐这种“临时解决方案”。我只是分享我目前的决定以及实施方式(直到我们想出更有趣的解决方案)。
2 个赞