使AJAX应用程序在没有后端控制的情况下可爬网

Making AJAX Applications crawlable without backend control

本文关键字:情况下 控制 后端 应用程序 AJAX      更新时间:2023-09-26

我构建了一个工具,利用EmberJS和GitHub Pages创建一个在浏览器中呈现的博客应用程序。它使用JavaScript来获取Markdown文件,并将它们呈现到应用程序的主体中。因为所有内容都是通过AJAX请求获取的,所以我不确定谷歌等抓取内容的最佳方式

我读过很多文章,建议使用PhantomJS来处理_escaped_fragment_请求,但由于内容托管在GitHub上,因此无法在服务器端运行任何内容。

有没有可能的解决办法(比如在将内容推送到GitHub之前提前呈现一些内容),或者我只是遇到了JavaScript应用程序的缺点?

问题是,谷歌机器人能做基本的javascript吗?

如果没有,那么就没有。正如我读到的,你的应用程序需要JS支持才能呈现任何页面。这使您没有一个机器人友好的访问方法。

如果是,那么,是:

因为JavaScript可以通过location.search访问url参数,所以您可以为谷歌创建可信的url,以获取由JS应用程序解释的href属性,并在onclick属性中为用户覆盖这些属性。

<a href="/?a=My-Blog-Post" onclick="someFunc(this.href);return false;">

这将与应用程序的onload中的代码配对,以查找location.search并获取指定url参数中可能出现的.md(在解析查询字符串后),希望谷歌运行所述onload来获取指定内容。这是许多站点的domain.com/#!ajax/path样式路径的变体。两者都是完全客户端的,但查询字符串变体会向googlebot表明,该页面值得作为一个不同的URL获取。

您可以使用进行测试http://google.com/webmasters,具有"作为谷歌机器人获取"功能。

我创建了一个小模块来帮助它http://alexferreira.github.io/seojs/

如果没有后端服务器做一些逻辑,这会让它变得有点棘手。。。

但也许,受这里所说的启发http://meta.discourse.org/t/seo-compared-to-other-well-known-tools/3914和http://eviltrout.com/2013/06/19/adding-support-for-search-engines-to-your-javascript-applications.html

您可以使用构建脚本在路径定义post/:post_slug(如/post/slug/index.html)之后的树中生成索引文件的副本。每个页面都有一个<noscript>标签,其中包含当前帖子的基本内容和链接。您甚至可以在页面中预加载CurrentPostJSON哈希来保存一些XHR。

这意味着使用历史API,这不是很友好的IE,但可能不是一个大问题。

你吃着沙漠走近晚餐,然后低头看着蔬菜。

你真正想做的是让页面在没有AJAX的情况下首先提供服务。一旦您在不需要JavaScript的情况下正确加载了页面,那么只需在所有请求中添加一个?ajax=1即可。如果是isset($_GET['ajax']),则可以避免加载页眉、页脚、边栏等。然后只需使用匿名window.onclick并从那里插入即可。

Web 3.0技术的示例视频,不使用任何第三方软件(包括框架),所有这些都是使用您试图创建的最严格的代码构建的。。。

http://www.youtube.com/watch?v=hZw8t-GVCB4

请随意查看我网站上的JavaScript。这个周末我很乐意帮助你。

你有一个构建脚本,为什么不在那里使用PhantomJs来生成静态网页呢?

U可以正常提供静态页面,如果启用JS,则可以重定向到AJAX页面。

唯一的一点是,Ember路由器超链接不适用于搜索引擎机器人。但我认为,如果没有服务器代码,绝对没有办法处理这个问题!