【发布时间】:2011-09-09 01:42:08
【问题描述】:
我使用 jQuery 通过 json 请求从数据库中检索内容。然后它将 HTML 中的通配符(如 %title%)替换为实际内容。这很好用,这样我就可以在数据库中维护我的多语言文本,但 Googlebot 只能看到通配符,而不是实际内容。我知道 Googlebot 会看到没有 javascript 的页面,但有没有办法解决这个问题?谢谢!
【问题讨论】:
我使用 jQuery 通过 json 请求从数据库中检索内容。然后它将 HTML 中的通配符(如 %title%)替换为实际内容。这很好用,这样我就可以在数据库中维护我的多语言文本,但 Googlebot 只能看到通配符,而不是实际内容。我知道 Googlebot 会看到没有 javascript 的页面,但有没有办法解决这个问题?谢谢!
【问题讨论】:
在给出这个答案时,Google 似乎有一个几乎完全或功能齐全的 javascript-crawling 机器人:
2009 年,Google 提出了一种使 AJAX 可抓取的解决方案:https://webmasters.googleblog.com/2009/10/proposal-for-making-ajax-crawlable.html
2015 年 Google 弃用上述方法:https://webmasters.googleblog.com/2015/10/deprecating-our-ajax-crawling-scheme.html
我已经成功构建了多个单页应用程序,这些应用程序可以在 Google 的网站管理员工具中正确呈现。
如果您想深入了解,网络上有很多资源:
【讨论】:
that are correctly rendered in Google's Webmaster tools:你的意思是可以看到页面是如何为 GoogleBot 呈现的吗?究竟是用什么工具?其他备注:我网站的主要内容是在 1)页面上呈现谷歌地图 2)AJAX 调用导入内容之后加载的。您认为这会起作用吗,还是您认为 GoogleBot 不会等待 1) 和 2) 而是将我的网站视为空的?
您应该仔细阅读 Google 的 this document。
它讨论了如何启用 Googlebot 索引:
#hashfragment 值的变化而变化的页面。#hashfragment 本身的页面。简而言之,您正在考虑添加<meta name="fragment" content="!">(如“步骤 3”中所述),并通过一次性返回所有内容来响应服务器端上的特殊请求,否则您的客户端代码将在页面加载后生成。这些特殊请求实际上是 URL 中带有 ?_escaped_fragment_=... 的请求,向服务器表明它应该将所有最终呈现(我的话)预烘焙到 Googlebot 的单个响应中。
也就是说,由于您将努力为这种特殊情况输出填充的内容,因此在一般情况下您最好这样做(避免需要处理 Google 的 _escaped_fragment_ 请求),如有必要,在页面加载后可能还有一种方法可以交换标记(例如,通过使用带有特定 class 或 id 的跨度来识别它们)。
【讨论】:
Googlebot 显然不会呈现它下载的页面。这可能与其他搜索机器人采用的行为相同。
您需要使用服务器端脚本或编译解决方案(有很多可供选择,包括 PHP、ASP.NET 等)。这样,您仍然可以保留动态和 i18n 功能,并且 Googlebot 会按照您的预期方式查看您的页面。或者至少对基本页面属性(如您知道 Googlebot 正在评估的标题)执行此操作,并为页面中不那么重要的部分保持 jQuery 更新。
(老实说,在页面下载后使用 jQuery 替换标记可能不是最有效的方法,尤其是在服务器端脚本如此简单和免费的情况下)。
【讨论】: