使AJAX应用程序在没有后端控制的情况下可爬网
Making AJAX Applications crawlable without backend control
我构建了一个工具,利用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>
标签,其中包含当前帖子的基本内容和链接。您甚至可以在页面中预加载CurrentPost
JSON哈希来保存一些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路由器超链接不适用于搜索引擎机器人。但我认为,如果没有服务器代码,绝对没有办法处理这个问题!
- 如何在未直接触发的情况下停止事件
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不传递此信息的情况下查找被调用的元素
- 如何在不刷新页面的情况下更新显示框
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 在我的情况下,如何进行http请求
- 在不知道深度或父属性的情况下从对象中删除属性
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- ROR:如何在不重新加载浏览器的情况下从控制器获取参数
- 如何在不影响其他元素的情况下扩展DIV
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- 获取 HTML 5 音频控制文件位置并在不使用 id 选择器的情况下更新 src
- 控制页面在确认框的情况下移动到顶部
- 在某些情况下没有“访问控制-允许源”标头错误,但在其他情况下则没有
- 使AJAX应用程序在没有后端控制的情况下可爬网
- HTML/Javascript:如何在不重新提交表单的情况下控制刷新操作