1

我遵循了谷歌指南使 AJAX 应用程序可抓取,以使我的 AngularJS 应用程序可抓取以用于 SEO 目的。所以我使用#! (hashbang) 在我的路线配置中:

    $locationProvider.hashPrefix('!');

所以我的网址看起来像这样:

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

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

...

当 google 替换为时hashbangs (#!)?_escaped_fragment_=我通过我的.htaccess文件将 google bots 重定向到页面的快照:

DirectoryIndex index.html

RewriteEngine On

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

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

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

所以我sitemap.xml通过Google Webmaster ToolsSearch Console提交了我的。我的站点地图中的所有 URL 都被谷歌正确索引,但不是域本身。所以这意味着这样的页面:

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

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

http://www.example.com/

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

所以爬虫没有“看到” hashbang,因此在这里不使用静态版本,这是一个大问题,因为特别是在这里我提供了最重要的内容。我已经尝试/通过.htaccessto重写和重定向,/#!/但这最终导致许多重定向并使一切崩溃。我也尝试使用

<meta name="fragment" content="!">

index.html. 但这根本没有帮助。以前有没有其他人遇到过这个问题?

4

0 回答 0