amazon-s3 - React Router + AWS 后端,如何做 SEO

标签 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,所以我的 URL 很漂亮。

这对我 100% 的用户来说都很好。

  • 所有静态文件都通过 CDN 提供
  • 动态 URL 将被路由到/#!/{...} 服务于 index.html(我的单页应用程序)
  • 我的客户端删除了 hashbang,因此 URL 又漂亮了

问题

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

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

为什么要删除 hashbang?我的应用程序对 100% 的用户都非常有用,那么为什么我需要以这种方式重新设计它才能让 Google 正确抓取它?现在是 2016 年,就跟着 hashbang...

我做错了什么吗?有没有更好的方法让 S3 在无法识别路径时为 index.html 提供服务?

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

In this thread React Router 的主要贡献者 Michael Jackson 说:“谢天谢地,hashbang 不再被广泛使用。”你会如何更改我的设置以不使用 hashbang?

最佳答案

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

关于amazon-s3 - React Router + AWS 后端,如何做 SEO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664870/

相关文章:

html - 搜索引擎优化语言信息

ruby-on-rails - Cloudfront 正在缓存来自 nginx 的 404 错误,以获取源服务器上确实存在的 Assets

javascript - 下载时重命名文件,但不适用于 AWS S3

java - 无法使用 Java 在 Amazon S3 中上传文件

python - s3- boto- 按上传时间列出存储桶中的文件

seo - 应使用哪种 URL 结构来显示 AMP HTML 与普通 HTML

php - 在 Amazon S3 上使用 php 强制下载

seo - 如何自定义我网站的谷歌搜索结果

amazon-cloudfront - 在 Amazon S3 和 CloudFront 上处理定期更新的文件

amazon-web-services - CloudFront + S3 网站的请求 header 包含 'Accept-Encoding' 时缺少 CORS header