反应路由器+ AWS后端,如何搜索引擎优化

时间:2016-02-27 02:09:58

标签: amazon-s3 seo amazon-cloudfront react-router

我在单页Web应用程序中使用React和React Router。由于我正在进行客户端渲染,因此我想用CDN提供所有静态文件(HTML,CSS,JS)。我使用Amazon S3托管文件,使用Amazon CloudFront作为CDN。

当用户请求/css/styles.css时,该文件存在,因此S3为其提供服务。 当用户请求/ foo / bar时,这是一个动态URL,因此S3添加了一个hashbang:/#!/ foo / bar。这将服务于index.html。在我的客户端,我删除了hashbang,所以我的网址很漂亮。

这一切都适用于100%的用户。

  • 所有静态文件均通过CDN提供
  • 动态网址将路由至/#!/ {...},该网站为index.html(我的单页应用程序)提供服务
  • 我的客户端删除了hashbang,因此URL又是

问题

问题是Google不会抓取我的网站。原因如下:

  • Google要求/
  • 他们看到一堆链接,例如到/ foo / bar
  • Google请求/ foo / bar
  • 他们被重定向到/#!/ foo / bar(找到302)
  • 他们删除了hashbang并请求/

为什么要删除hashbang?我的应用程序适用于100%的用户,所以为什么我需要以这种方式重新设计它才能让Google正确抓取它?这是2016年,只需遵循hashbang ......

< /咆哮>

我做错了吗?当它无法识别路径时,是否有更好的方法让S3服务于index.html?

设置节点服务器来处理这些路径并不是正确的解决方案,因为这会破坏CDN的全部目的。

In this thread反应路由器的最大贡献者迈克尔杰克逊说:“谢天谢地,不再广泛使用hashbang。”你如何改变我的设置以不使用hashbang?

3 个答案:

答案 0 :(得分:6)

您还可以查看此trick。您需要设置cloudfront分发,然后在"错误页面"中更改404行为。您的发行版部分。这样你就可以再次使用domain.com/foo/bar链接:)

答案 1 :(得分:4)

我知道这已经有几个月了,但对于遇到同样问题的任何人,您只需将“index.html”指定为S3中的错误文档即可。可以在存储桶属性=>下找到错误文档属性。静态网站托管=>启用网站托管。

请记住,采用这种方法意味着您将负责处理自己的应用程序中的404错误以及其他http错误。

答案 2 :(得分:-1)

当你想制作SEO友好的网站时,不建议使用Hash bang,即使它在Google上编入索引,该页面也只显示一点点内容。

建立您网站的最佳方式是使用最新趋势和技术“渐进式网络增强”在Google上搜索它,您会找到很多关于它的文章。

主要是你应该为每个页面单独建立一个链接,当用户点击任何页面时,他将使用你想要的任何效果或者甚至是单页网站重定向到这个页面。

在这种情况下,Google将为每个页面提供一个唯一的链接,用户将拥有奇特的效果和出色的用户体验。

EX:

<a href="http://www.example.com/contact-us" onclick="fancyEffects();">Contact Us</a>