我有这个设置:
- 使用 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”字符串,但这是否可能并且不被视为伪装?还有其他更聪明的方法吗?