我在单页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%的用户。
问题
问题是Google不会抓取我的网站。原因如下:
为什么要删除hashbang?我的应用程序适用于100%的用户,所以为什么我需要以这种方式重新设计它才能让Google正确抓取它?这是2016年,只需遵循hashbang ......
< /咆哮>
我做错了吗?当它无法识别路径时,是否有更好的方法让S3服务于index.html?
设置节点服务器来处理这些路径并不是正确的解决方案,因为这会破坏CDN的全部目的。
In this thread反应路由器的最大贡献者迈克尔杰克逊说:“谢天谢地,不再广泛使用hashbang。”你如何改变我的设置以不使用hashbang?
答案 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>