一页的网站〜最佳实践&关于索引和社交媒体共享的方法

时间:2014-03-04 17:22:21

标签: javascript php web-applications asynchronous single-page-application

在我问我的问题之前,这是一个元问题:我可以在这里发布这个问题吗?这是关于最佳实践,但问题是相当具体的。我没有看到更好的StackExchange网站问这个问题。

我即将开始开发一种单页网站。它将包括文章等的集合视图以及所述文章的更详细视图,这些文章将以叠加方式异步加载。因此,这不是一个真正的异步单页网站,我不会使用角度或排序,但为了简单起见,我将其称为单页网站。

新出现的问题是该网站将严重依赖社交媒体共享,并且需要由搜索引擎抓取工具正确编入索引。

毋庸置疑,当我在异步加载的叠加层中阅读有趣的文章时,我决定在社交网络上复制粘贴网址(这将是http://www.onepagesite.com);东西不起作用。

我正在寻找转义网址的部分,以便可以链接覆盖页面。在浏览第1条叠加层时,会将客户端网址重写为http://www.onepagesite.com/#!article/1

然而,现在抓取成为一个问题,因为机器人(Facebook,谷歌等)不执行js而不等待加载异步内容。

他们执行拥有唯一的用户代理。因此,一种解决方案是嗅探用户代理并为机器人提供与人类客户端不同的html文件。

我能想到的另一个解决方案是使URL成为应用程序的实际状态,由以下示例解释:

  • 当用户浏览文章时,该文章将被异步加载,并且该网址将被重写为http://www.onepagesite.com/#!article/1
  • 然后,当用户或机器人直接请求此URL(因为它已被共享或其他)时,后端将吐出在单个同步加载中生成应用程序状态所需的所有html ,以便机器人可以将页面编入索引,用户将能够以异步方式继续浏览。

此解决方案要求后端的工厂/页面呈现部分的工作方式与客户端javascript重写URL的方式完全相同。

现在这就是我作为一页网站的绝对新手,可以看作是一种可能的解决方案。

所以这是我的问题:

  • 这是一个可行的解决方案,如果有的话,是否应该采用不同的方式进行,或者在我缺少的道路上是否有任何重大障碍?
  • ......或者我完全看错了方法,有没有更简单明了的方法来处理这个项目?

我仍在布置我的项目的总体结构,所以我仍然相当灵活&因此问题

1 个答案:

答案 0 :(得分:2)

您正在寻找的是使ajax可抓取。幸运的是,Google has figured this out for you

简短版本是你使用像你所示的哈希爆炸片段(#!article/1),当爬行机器人询问你时(使用#!之后的部分作为查询参数名为__escaped_fragment)并返回相关内容。链接中的详细信息。

他们给出的示例都有key=value样式片段,例如:

http://example.com#!article=21

......机器人要求这样:

http://example.com?_escaped_fragment_=article=21

...然后将文章的内容返回到机器人。