”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在Next.js中掌握ISR:如何增强SEO和用户体验

在Next.js中掌握ISR:如何增强SEO和用户体验

发布于2025-03-23
浏览:982

什么是ISR?

ISR如何改善SEO和用户体验?

如果您使用了react.js或传统的单页应用程序(SPA),则您知道水疗中心通常只有一个HTML文件。当用户首次访问水疗网站时,水疗中心会发送最小的HTML文件(在React中,这通常是index.html)。之后,它获取了请求页面所需的CSS,JavaScript和其他资源。然后将这些资源渲染并合并到HTML到达客户端(浏览器)后。但是,如前所述,Spa发送的初始HTML文件几乎没有内容。

现在,想象一个Google机器人,请求网站而不是用户。尽管现代的Google Bot可以执行JavaScript来检索内容,但仅依靠此内容仍会对SEO产生负面影响。该机器人可能会将初始HTML视为空的,这可能会延迟索引页面内容,并可能损害您的搜索排名。

Next.js通过使用服务器端渲染技术(例如服务器预渲染)来解决此问题。我们将在稍后详细介绍渲染,但这是一个简短的概述。使用服务器预渲染,每个路由的HTML将在服务器上生成并直接发送给客户端。 CSS和JavaScript文件通常被捆绑并缓存。

因此,当用户或Google bot访问网站时,他们立即看到一个完全渲染的页面。这可以改善SEO,因为Google Bot可以立即看到HTML中的内容。它还通过加速页面加载来增强用户体验,这意味着用户不必等待内容动态加载。

ISR如何工作?

如果您想更好地了解ISR(增量静态再生)的工作方式,请让我以示例来解释。想象一下,您是管理网站上博客列表的管理员。每次发布新博客时,您都不想重建项目。相反,您希望每60秒自动更新您的博客列表页面。因此,当您撰写新博客时,您希望它出现在不手动重建项目的情况下。这是ISR进来的地方。虽然您可以使用SSR(服务器端渲染)之类的方法,但如果您希望网站以特定的间隔更新,但ISR是必经之路。我们稍后将讨论SSR。

现在,假设您在博客列表页面上实现ISR,并将重新验证时间设置为60秒。您是第一次构建项目,然后重新验证计时器开始。用户访问您的网站,转到博客列表页面,并查看当前的博客列表。同时,您发布了一篇新的博客文章,但是由于60秒的窗口中还有20秒,因此访问该网站的新用户还没有看到新博客。

60秒开始,ISR检查了新数据,看到有一个新的博客文章,并使用更新的内容重新生成静态页面。然后,它在服务器上缓存新版本。要注意的是:虽然ISR正在再生页面,但用户仍会看到旧版本,直到新版本准备就绪。因此,在ISR完成后,任何新访问者都会看到更新的页面,但是在重新验证之前已经在网站上的用户除非旧页面刷新旧页面。

要记住的另一个关键是,当您使用NPM Run Build构建网站时,初始静态页面将由SSG(静态站点生成)而不是ISR生成。第一个构建后,ISR开始处理再生过程。另外,ISR不会再生您的整个网站;它仅重新生成特定页面ISR实现的位置。因此,当ISR再生时,只有该特定页面已更新,而不是整个项目。

如何在应用程序路由器中实现ISR

要在应用程序路由器中实现ISR(增量静态再生),重要的是要知道必须在服务器组件而不是客户端组件中使用ISR。这是因为ISR是一种服务器渲染方法,而不是客户端的方法。因此,您应该将ISR放在诸如app/blog/page.tsx或app/blog/page.jsx的文件中。

要记住的一个关键点是,如果您不在设置重新验证选项的服务器组件中调用API,则ISR将无法正常工作。服务器组件必须能够获取新数据才能再生页面,否则不会发生更新。

为了启用ISR,您需要做的就是将重新验证属性添加到获取方法中。如果您喜欢使用Axios而不是获取,则仍然可以通过类似地配置请求来使用它,但是现在,我坚持使用fetch。也许以后我会解释如何使用Axios进行。

我提供了TSX文件和JSX FIEL的示例:

这是在tsx文件

中实现的示例 [2

这是在JSX文件中实现的示例:

[2

如何在页面路由器中实现ISR?

要在页面路由器中实现ISR,您必须从组件中导出getstatic props,并将重新验证属性添加到此函数中。此功能仅在服务器端渲染期间运行,因此您需要确保在GetStaticProps中调用API。如前一节所述,您可以使用fetch或axios获取数据,但请记住必须在GetStaticProps中进行API调用,否则ISR将行不通。

再次,此功能是在服务器上执行的,而不是客户端。这是一个示例要证明:

这是在tsx文件中实现的示例:

[2

这是在JSX文件中实现的示例:

[2

结论

Mastering ISR in Next.js: How to Boost SEO and User Experience您需要对ISR是什么,其工作方式以及如何在页面路由器和应用程序路由器中实现它有很好的了解。在本文中,我试图尽可能清楚地解释它,如果我可以更好地解释它,稍后会更新它。如果有什么尚不清楚的话,请通过发表评论让我知道,我将提供进一步的澄清。

感谢您阅读此博客,希望您喜欢它!

版本声明 本文转载于:https://dev.to/saeedniyabati/mastering-isr-in-nextjs-how-to-boost-seo-and-user-experience-5j8?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-04-12
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否需要手动调用“ delete”操作员在heap-exprogal exit exit上。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(HEAP内存)的指针。当应用程序退出时,此内存是否会自动发布?通常,是。但是,即使在这...
    编程 发布于2025-04-12
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-12
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-04-12
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-04-12
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-04-12
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-04-12
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-12
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-12
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-12
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用时间数据时...
    编程 发布于2025-04-12
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-12
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-04-12
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-04-12
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制,控制元素的滚动行为对于确保用户体验和可访问性是必不可少的。一种这样的方案涉及限制动态大小的父元素中元素的滚动范围。问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期...
    编程 发布于2025-04-12

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3