我试图了解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抓取工具使用,以使我的网站获得良好的成绩。如果将内容添加到数据库中,如何实现?
答案 0 :(得分:2)
如前所述,您可以设置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完成,页面将使用 要求的数据。从现在开始,每个请求相同页面的人都会 获取静态预渲染的页面。 这样可确保用户在保存的同时始终获得快速体验 快速构建和静态生成的好处。