Javascript Angularjs vs SEO vs pushState

Javascript Angularjs vs SEO vs pushState,javascript,angularjs,seo,pushstate,Javascript,Angularjs,Seo,Pushstate,读完本文后,我决定在我的angularjs应用程序中使用pushstate api,它完全基于api(独立前端和独立后端) 这是我的测试站点: 我创建了一个网站地图并上传到谷歌网站管理员工具 据我所见: 谷歌索引了主页,索引了动态导航(酷!),但没有索引 任何动态URL。 请 我检查了相关线程中给出的示例站点: 据我所见,当我直接访问一个特定的页面时,被认为是动态的内容被服务器返回,因此它被索引。但这在我的情况下是不可能的,因为我的应用程序是完全动态的 请你告诉我,我的特殊情况有什么问题,如何

读完本文后,我决定在我的angularjs应用程序中使用pushstate api,它完全基于api(独立前端和独立后端)

这是我的测试站点:

我创建了一个网站地图并上传到谷歌网站管理员工具

据我所见:

谷歌索引了主页,索引了动态导航(酷!),但没有索引 任何动态URL。 请

我检查了相关线程中给出的示例站点:

据我所见,当我直接访问一个特定的页面时,被认为是动态的内容被服务器返回,因此它被索引。但这在我的情况下是不可能的,因为我的应用程序是完全动态的

请你告诉我,我的特殊情况有什么问题,如何解决

提前谢谢

注意:这个问题是关于pushState方式的。请不要建议我使用转义片段或三维第三方服务,如prerender.io。我想知道如何使用这种方法

据我所见,当我直接访问一个特定的页面时,被认为是动态的内容由服务器返回

事实并非如此。您正在加载一个包含一些JavaScript的空白页面,该JavaScript会立即加载该URL应显示的内容


你需要让服务器生成运行JavaScript后得到的HTML,而不是依赖JS。

显然昆汀没有阅读你提到的帖子。其要点在于它使用了pushState,并且证明了它不需要静态html来帮助爬行器

“该网站使用HTML5 wizrdry[sic]将“实际内容”异步加载到代码的其余部分:这使用户的速度更快,但搜索引擎仍然可以对其进行完全索引。”


除了不可靠的正字法之外,这个演示显示异步加载的内容是可索引的。

正如您在上所看到的,Google确实解释了有角度的页面,其中标题和元描述正确地显示在页面中

很有可能,如果他们解释JS的话,他们的解释足以进行彻底的链接分析

事实上,有些网页没有被索引是由于谷歌他们分析的事实,即使你把它添加到一个网站地图或提交它在网站管理员工具中索引。在上,常规链接和范围绑定链接当前都未被索引


更新:所以具体回答这个问题,测试站点上的pushState没有问题。这些页面根本不包含谷歌的增值内容。(参见他们的)。

Sray,我最近在另一个帖子中提出了同样的问题,有人建议Googlebot和Bingbot对使用pushState的温泉进行索引。我还没有看到一个能确保我自信的例子,但这是我被告知的。然后就Facebook而言,使用开放图元标记来覆盖你的基础

我仍然没有信心在不向机器人发送HTML代码片段的情况下继续推进,但像你一样,我也没有发现任何教程告诉我如何在使用pushState时执行此操作,甚至没有提出建议。但下面是我想象的使用Symfony2的工作方式

  • 使用prerender或其他服务生成所有页面的静态片段。将它们存储在路由器可以访问的地方
  • 在Symfony2路由文件中,创建与SPA匹配的路由。我在localhost.com/ng-test/上运行了一个测试SPA,因此我的路线如下所示:

    #向该路由添加尾随/将中断该路由。不知道为什么。

    #StackOverflow中的格式也不正确。我是yaml。

    NgTestReroute:

    ----path:/ng test/{one}/{two}/{three}/{four}

    ----默认值:

    ------------控制器:驱动器设计绑定:NgTest:NgTest重新路由

    ------------'one':null

    ------------'two':null

    ------------'three':null

    ------------'four':null

    ----方法:[GET]

  • 在Symfony2控制器中,检查用户代理以查看它是Google机器人还是bingbot。您应该能够使用下面的代码实现这一点,然后使用此列表以您感兴趣的机器人为目标()

    if(strstrstr(strtolower($\u SERVER['HTTP\u USER\u AGENT'),“googlebot”))

    {

    //怎么办

    }

  • 如果您的控制器发现与bot匹配,请将HTML代码段发送给它。否则,就像我的AngularJS应用程序一样,只需将用户发送到索引页面,Angular就会正确地完成其余的工作

  • 还有,你的问题得到回答了吗?如果有,请选择一个,这样我和其他人可以告诉你什么对你有用


    我的信息中有一部分与相关。它们确实返回静态内容。>>>您需要让服务器生成运行JavaScript后得到的HTML,而不依赖于JS。你说我必须为谷歌机器人提供静态内容吗?是的。您需要静态内容。好的,谢谢您的回复。假设我想使用幻影。如何使用pushstate angularjs启动它?有很多关于如何处理常规URL(hashbang)的文章,但我不太明白如何告诉搜索机器人使用静态内容,因为没有使用转义碎片。@Quentin这真的不再是100%准确了,你不需要静态内容。我见过一些网站的例子(OP中列出了其中一个),这些网站的内容索引为100%动态内容。我个人有一个网站,是100%的角度和API驱动,有网页索引。我还没准备好说(相对短暂的)要求预渲染内容的日子已经过去了,但如果这是我的生意,我会非常紧张,因为谷歌和必应都能够阅读动态JS驱动的页面,并且正在努力使预渲染变得不必要。哎呀,我确实注意到OP中列出的网站确实进行了渲染