0

我有这个设置:

  • 使用 Javascript 生成 HTML 内容的单页应用程序。非 JS 用户没有可见的 HTML。
  • History.js (pushState) 用于处理没有 hashbang 的 URL。因此,“domain.com”上的应用程序可以加载“page-id”的动态内容并将URL更新为“domain.com/page-id”。此外,直接 URLS 通过 Javascript 可以很好地工作。

问题是 Google 无法以这种方式执行 Javascript。所以本质上,据谷歌所知,没有任何内容。

我正在考虑仅将缓存的内容提供给搜索机器人。因此,当搜索机器人点击“domain.com/page-id”时,它会加载缓存的内容,但如果用户加载相同的页面,它会看到正常的(Javascript 注入的)内容。

对此提出的解决方案是使用 hashbang,因此 Google 可以使用“escaped_fragment”字符串自动将这些 URL 转换为替代 URL。在服务器端,我可以将这些替代 URL 重定向到缓存的内容。因为我不会使用 hashbangs,所以这不起作用。

理论上我已经准备好了一切。我可以生成一个 sitemap.xml 并且可以生成缓存的 HTML 内容,但是缺少一块拼图。

我想我的问题是:如何过滤掉搜索机器人的访问权限,这样我就可以为这些机器人提供缓存的页面,同时为我的用户提供支持 JS 的普通应用程序?

一个想法是为任何机器人解析 .htaccess 中的“HTTP_USER_AGENT”字符串,但这是否可能并且不被视为伪装?还有其他更聪明的方法吗?

4

1 回答 1

0

将 URL 更新为“domain.com/page-id”。此外,直接 URLS 通过 Javascript 可以很好地工作。

那是你的问题。直接 URL 不应该通过 JavaScript 工作。服务器应该生成内容。

一旦加载了客户端请求的任何页面,JavaScript 就可以接管。如果 JavaScript 不可用(例如,因为它是搜索引擎机器人),那么您应该有可以继续工作的常规链接/表单(如果 JS 可用,那么您将绑定到单击/提交事件并覆盖默认行为) .

一个建议的解决方案是使用 hashbangs

Hashbangs 是一个糟糕的解决方案。pushState已修复 hashbangs,并且您已经在使用它 - 您只需要正确使用它。

如何过滤掉搜索机器人访问

你不需要。改用渐进增强/不显眼的 JavaScript

于 2012-12-11T11:38:42.947 回答