使用Next JS

问题描述

我试图了解Next JS如何进行动态路由,并且对如何在自己的网站中正确实现它感到有些困惑。基本上,我有一个内容数据库MysqL),并且该数据库一直在增长,比如说它们是博客文章,其图像存储在GCS中。据我了解,您可以在页面文件夹中创建一个pages/[id].js文件,该文件可以处理为新页面动态创建的路线,但是,为了使您获得良好的SEO分数,Google抓取工具需要查看您的内容在发出任何JavaScript或数据请求之前。因此,页面必须物理可用,以便内容在加载时立即显示。因此,如果我有pages/[id].js并且每天都有内容添加数据库,那么物理内容文件应该如何自发地填充pages文件夹?如果pages文件不断创建,如何防止磁盘空间不足?我确定有些事情我不理解。

我在nextjs.org上读到,您可以拥有一个needs to return a list of possible values for 'id'函数getStaticPaths。我想知道,如果我的网站处于活动状态,并且不断使用其自己的唯一ID将新内容页面)不断添加数据库中,那么它们如何“意识到”这些ID?我是否需要编写一个程序或消息队列系统,以将新的ID不断地附加到getStaticPaths所读取的文件中?如果我必须在世界各地的多台服务器上复制站点,或者一台服务器死了,该如何跟踪文件内容才能启动具有相同内容的新服务器?

据我了解,为了让Google在您的网站上看到任何形式的内容页面文本(内容)必须是静态的,并且可以通过物理文件快速访问。由于Google的抓取工具主要关注文本,因此图像和其他所有内容都可以稍后加载。因此,如果每个帖子都需要是应用程序pages文件夹中的物理文件,那么如果将内容添加数据库中,如何创建新的pages文件

TL:DR我的主要担心是让我的内容随时可供Google抓取工具使用,以使我的网站获得良好的成绩。如果将内容添加数据库中,如何实现?

解决方法

如前所述,您可以设置getStaticPaths在构建时提供id的值列表。如果我理解正确,那么您最担心的是在初始构建后添加新内容后会发生什么。 为此,您必须从getStaticPaths返回fallback key

如果后备密钥为false,则最初未指定的所有ID都将变为404,并且您每次添加新内容时都需要重新构建应用程序。这就是你不想要的。
如果将其设置为true,则初始值将像以前一样被预渲染,但是新值将不会变为404。相反,第一个使用新Id访问路径的用户将触发该新页面的呈现。如果请求命中了构建时不可用的id,则可以动态检查新内容。

有趣的是,第一个访问者将暂时看到‘fallback’-version of the page,而next.js处理请求。在该后备广告上,您通常只会显示一个加载微调器。然后,服务器将数据传递给客户端,以正确呈现整个页面。因此,在实践中,用户将首先看到加载指示器,然后页面将使用实际内容进行更新。随后的访问者将立即获得现在呈现的结果。

您现在可能会担心爬网程序访问该后备页面而没有获得SEO内容。此问题已在此处解决:https://github.com/vercel/next.js/discussions/12482

回退策略除了能够在构建后提供新页面之外,还有另一种用途,它允许您仅呈现网站的一小部分(例如访问量最大的页面),而其他页面仅生成必要时。

From the docs: When is fallback: true useful?

您可以静态生成一小部分页面并使用后备广告: 其余的都正确。当有人请求未生成的页面时 但是,用户将看到带有加载指示器的页面。不久 之后,getStaticProps完成,页面将使用 要求的数据。从现在开始,每个请求相同页面的人都会 获取静态预渲染的页面。 这样可确保用户在保存的同时始终获得快速体验 快速构建和静态生成的好处。