Google没有正确索引AJAX应用程序的startpage(index.html),但所有子页面都包含hashbang(#!)

时间:2015-06-20 14:54:10

标签: ajax angularjs google-crawlers hashbang google-index

我按照谷歌指南Making AJAX applications crawlable使我的AngularJS应用程序可以抓取用于搜索引擎优化目的。所以我正在使用#! (hashbang)在我的路线配置中:

    $locationProvider.hashPrefix('!');

所以我的网址如下:

http://www.example.com/#!/page1.html

http://www.example.com/#!/page2.html

...

谷歌将hashbangs (#!)替换为?_escaped_fragment_=我通过我的.htaccess文件将谷歌机器人重定向到该页面的快照:

DirectoryIndex index.html

RewriteEngine On

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$

RewriteRule ^(.*)$ /snapshot/%1? [NC,L]

到目前为止,一切都像魅力一样。当机器人请求关注URL http://www.example.com/#!/page1.html时,它将替换hashbang并实际请求http://www.example.com/?_escaped_fragment_=/page1.html,我将其重定向到所请求页面的静态/预渲染版本。

所以我通过Google Webmaster Toolssitemap.xml提交了Search Console。我的站点地图中的所有网址都由谷歌正确编制索引,但不是域名本身。所以它意味着像:

这样的页面
http://www.example.com/#!/page1.html 

已正确编入索引,并且通过Google搜索我的任何子页面的特定内容,Google会找到正确的页面。问题是start/homepage本身“自然”没有hashbang:

http://www.example.com/

当用户访问该网站时,此处附加了hashbang(通过我的路由器配置中的javascript)。但看起来谷歌机器人的情况并非如此。

因此抓取工具不会“看到”hashbang,因此不会使用静态版本,这是一个很大的问题,因为特别是在这里我提供了最重要的内容。 我已经尝试重写并通过/.htaccess重定向到/#!/,但最终会导致许多重定向并导致崩溃。我也尝试过使用

<meta name="fragment" content="!">
{p}在index.html的标题中。但这根本没有帮助。 有没有其他人在遇到过这个问题?

0 个答案:

没有答案