<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ wendy chen - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ wendy chen - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:37 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/author/wendy/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 如何在 Next.js 应用程序中使用服务器端渲染来提升 SEO ]]>
                </title>
                <description>
                    <![CDATA[ 服务端渲染（SSR）是一种可以帮助提升网站 SEO 的网页开发技术。它通过在服务器端生成 HTML 内容来响应用户的请求。 这种方法与客户端渲染（CSR）形成对比，在客户端渲染中，内容作为基本的 HTML 框架传递，JavaScript 在浏览器中获取和显示数据。 SSR 提供了显著的 SEO 优势，使其非常适合使用 Next.js 这样流行的 React 框架。让我们来讨论一下在 Next.js 中使用 SSR 如何提升网站的搜索引擎可见性。 内容目录  1. 什么是服务端渲染  2. 如何开始使用 Next.js 和 SSR  3. Next.js 如何实现服务端渲染  4. 使用 getStaticProps 和 getServerSideProps 获取数据  5. SSR 为 Next.js 带来的 SEO 优势及优化方法 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/server-side-rendering-in-next-js-for-improved-seo/</link>
                <guid isPermaLink="false">67ca7a6b3d55950475baa137</guid>
                
                    <category>
                        <![CDATA[ NextJS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ SEO ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ wendy chen ]]>
                </dc:creator>
                <pubDate>Fri, 07 Mar 2025 05:29:31 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2025/03/1741325343969.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/server-side-rendering-in-next-js-for-improved-seo/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use Server-Side Rendering in Next.js Apps for Better SEO</a>
      </p><!--kg-card-begin: markdown--><p>服务端渲染（SSR）是一种可以帮助提升网站 SEO 的网页开发技术。它通过在服务器端生成 HTML 内容来响应用户的请求。</p>
<p>这种方法与客户端渲染（CSR）形成对比，在客户端渲染中，内容作为基本的 HTML 框架传递，JavaScript 在浏览器中获取和显示数据。</p>
<p>SSR 提供了显著的 SEO 优势，使其非常适合使用 Next.js 这样流行的 React 框架。让我们来讨论一下在 Next.js 中使用 SSR 如何提升网站的搜索引擎可见性。</p>
<h3 id="">内容目录</h3>
<ol>
<li><a href="#heading-what-is-server-side-rendering">什么是服务端渲染</a></li>
<li><a href="#heading-how-to-get-started-with-nextjs-and-ssr">如何开始使用 Next.js 和 SSR</a></li>
<li><a href="#heading-how-nextjs-enables-server-side-rendering">Next.js 如何实现服务端渲染</a></li>
<li><a href="#heading-data-fetching-with-getstaticprops-and-getserversideprops">使用 getStaticProps 和 getServerSideProps 获取数据</a></li>
<li><a href="#heading-benefits-of-ssr-for-seo-with-nextjs-and-how-to-optimize">SSR 为 Next.js 带来的 SEO 优势及优化方法</a></li>
<li><a href="#heading-conclusion">结论</a></li>
</ol>
<h2 id="">什么是服务端渲染</h2>
<p>服务端渲染（SSR）是一种网页开发技术，在网页服务器发送请求到用户的浏览器之前，就生成完整的 HTML 网页内容。</p>
<p>这与客户端渲染（CSR）不同，客户端渲染是在浏览器下载基本 HTML 结构后再使用 JavaScript 获取和显示内容。</p>
<h2 id="nextjsssr">如何开始使用 Next.js 和 SSR</h2>
<p>开始使用 Next.js 和服务端渲染（SSR）需要几个步骤。以下是一个帮助你设置 Next.js 项目并实现 SSR 的分步骤指南。</p>
<h3 id="nextjs">第一步：安装 Next.js</h3>
<p>首先，你需要安装 Next.js。你可以使用 <code>create-next-app</code> 来设置一个具有默认配置的新的 Next.js 项目。在终端运行如下命令：</p>
<pre><code>npx create-next-app my-next-app
cd my-next-app
npm run dev
</code></pre>
<p>此命令会在名为 <code>my-next-app</code> 的文件夹中创建一个新的 Next.js 应用程序，并启动开发服务器。</p>
<h3 id="">第二步：了解项目结构</h3>
<p>Next.js 通过一些默认的文件夹和文件组织项目：</p>
<ul>
<li><strong><code>pages/</code></strong>：该文件夹包含应用程序的所有页面。每个文件代表应用中的一个路由。</li>
<li><strong><code>public/</code></strong>：可以放置图像等静态资源。</li>
<li><strong><code>styles/</code></strong>：包含用于应用程序样式的 CSS 文件。</li>
</ul>
<h3 id="ssr">第三步：创建一个使用 SSR 的简单页面</h3>
<p>现在，让我们创建一个使用 SSR 的简单页面。</p>
<p>新建文件 <code>pages/index.js</code>：</p>
<pre><code class="language-javascript">// pages/index.js
import React from 'react';

const Home = ({ data }) =&gt; {
  return (
    &lt;div&gt;
      &lt;h1&gt;欢迎使用 Next.js 和 SSR&lt;/h1&gt;
      &lt;p&gt;从服务器获取的数据：{data.message}&lt;/p&gt;
    &lt;/div&gt;
  );
};

export async function getServerSideProps() {
  // 从 API 或其他来源获取数据
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();

  // 将数据作为 props 返回给 Home 组件
  return {
    props: {
      data,
    },
  };
}

export default Home;
</code></pre>
<p>让我们详细讨论一下这段代码。对于 <code>Home</code> 组件：</p>
<ul>
<li><code>Home</code> 组件是一个接收 <code>props</code> 的函数式组件。</li>
<li><code>data</code> prop 包含从服务器获取的数据。</li>
<li>在组件内部，我们渲染欢迎消息和获取的数据。</li>
</ul>
<p><code>getServerSideProps</code> 函数：</p>
<ul>
<li>这个函数从 <code>pages/index.js</code> 文件中导出。</li>
<li>对于每个请求，这个函数在服务器上执行。</li>
<li>在此函数中可以执行异步操作，如从外部 API 获取数据。</li>
<li>获取的数据作为一个带有 <code>props</code> 属性的对象返回，该对象会作为 props 传给 <code>Home</code> 组件。</li>
</ul>
<p>你可以为 <code>getServerSideProps</code> 函数添加错误处理，以应对数据获取过程中可能发生的问题。以下是一个例子：</p>
<pre><code class="language-javascript">export async function getServerSideProps() {
  try {
    const res = await fetch('https://api.example.com/data');
    if (!res.ok) {
      throw new Error('数据获取失败');
    }
    const data = await res.json();
    return {
      props: {
        data,
      },
    };
  } catch (error) {
    console.error(error);
    return {
      props: {
        data: { message: '数据获取时出错' },
      },
    };
  }
}
</code></pre>
<h4 id="">第四步：运行应用程序</h4>
<p>如果开发服务器还未启动，请启动它：</p>
<pre><code>npm run dev
</code></pre>
<p>打开浏览器并访问 <code>http://localhost:3000</code>。你应该看到页面上显示了从 API 获取的信息。</p>
<h3 id="nextjs">Next.js 如何实现服务端渲染</h3>
<p>Next.js 提供了一种无缝的方式来启用 SSR 和静态站点生成（SSG）。默认情况下，它会预渲染每个页面。根据用例的不同，你可以在 SSR 和 SSG 之间进行选择：</p>
<ul>
<li><strong>服务端渲染（SSR）</strong>：页面在每次请求时渲染。</li>
<li><strong>静态站点生成（SSG）</strong>：页面在构建时生成。</li>
</ul>
<p>Next.js 根据你在页面组件中实现的函数（<code>getStaticProps</code> 和 <code>getServerSideProps</code>）来确定使用哪种渲染方式。</p>
<h3 id="nextjs">Next.js 页面组件</h3>
<p>Next.js 使用 <code>pages/</code> 目录来定义路由。在这个目录中的每一个文件都对应你应用中的一个路由。</p>
<ul>
<li><code>pages/index.js</code> → <code>/</code></li>
<li><code>pages/about.js</code> → <code>/about</code></li>
<li><code>pages/posts/[id].js</code> → <code>/posts/:id</code></li>
</ul>
<p>以下是一个页面组件的基础示例：</p>
<pre><code class="language-javascript">// pages/index.js
import React from 'react';

const Home = () =&gt; {
  return (
    &lt;div&gt;
      &lt;h1&gt;欢迎来到 Next.js&lt;/h1&gt;
      &lt;p&gt;这是首页。&lt;/p&gt;
    &lt;/div&gt;
  );
};

export default Home;
</code></pre>
<h3 id="getstaticpropsgetserversideprops">使用 <code>getStaticProps</code> 和 <code>getServerSideProps</code> 进行数据获取</h3>
<p><code>getStaticProps</code> 用于静态生成。它在构建时运行，并允许你获取数据并将其作为 props 传递给页面。对于不经常更改的数据，使用它。</p>
<p>示例：</p>
<pre><code class="language-javascript">// pages/index.js
import React from 'react';

const Home = ({ posts }) =&gt; {
  return (
    &lt;div&gt;
      &lt;h1&gt;博客文章&lt;/h1&gt;
      &lt;ul&gt;
        {posts.map(post =&gt; (
          &lt;li key={post.id}&gt;{post.title}&lt;/li&gt;
        ))}
      &lt;/ul&gt;
    &lt;/div&gt;
  );
};

// 该函数在构建时运行
export async function getStaticProps() {
  // 从 API 获取数据
  const res = await fetch('https://jsonplaceholder.typicode.com/posts');
  const posts = await res.json();

  return {
    props: {
      posts,
    },
  };
}

export default Home;
</code></pre>
<p><code>getServerSideProps</code> 用于服务器端渲染。它在每个请求时运行，并允许你在请求时获取数据。</p>
<p>示例：</p>
<pre><code class="language-javascript">// pages/index.js
import React from 'react';

const Home = ({ data }) =&gt; {
  return (
    &lt;div&gt;
      &lt;h1&gt;使用 Next.js 进行服务器端渲染&lt;/h1&gt;
      &lt;p&gt;从服务器获取的数据: {data.message}&lt;/p&gt;
    &lt;/div&gt;
  );
};

// 该函数在每个请求时运行
export async function getServerSideProps() {
  // 从外部 API 获取数据
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();

  return {
    props: {
      data,
    },
  };
}

export default Home;
</code></pre>
<h2 id="ssrseo">使用 SSR 进行 SEO 的优势及优化方式</h2>
<p>在本节中，我们将了解使用 SSR 进行 SEO 的主要优势，并提供易于遵循的提示，告诉你如何在 Next.js 应用中充分利用这些优势。</p>
<h3 id="1">1. 提高搜索引擎索引</h3>
<p>客户端渲染 (CSR) 可能导致搜索引擎难以正确索引内容，因为内容是在用户的浏览器中通过 JavaScript 渲染的。</p>
<p>然而，SSR 会在将内容发送到用户的浏览器之前在服务器上渲染，确保 HTML 是完整的，搜索引擎可以轻松抓取和索引。</p>
<p><strong>对重要页面使用 SSR：</strong> 确保关键页面如登陆页、博客文章和产品页面在服务器上渲染，以便更好地进行索引。</p>
<p>示例 – 使用 SSR 进行博客文章页面：</p>
<pre><code class="language-javascript">// pages/blog/[id].js
import React from 'react';
import { useRouter } from 'next/router';
import Head from 'next/head';

const BlogPost = ({ post }) =&gt; {
  const router = useRouter();
  if (router.isFallback) {
    return &lt;div&gt;加载中...&lt;/div&gt;;
  }

  return (
    &lt;div&gt;
      &lt;Head&gt;
        &lt;title&gt;{post.title}&lt;/title&gt;
        &lt;meta name="description" content={post.excerpt} /&gt;
      &lt;/Head&gt;
      &lt;h1&gt;{post.title}&lt;/h1&gt;
      &lt;p&gt;{post.content}&lt;/p&gt;
    &lt;/div&gt;
  );
};

export async function getServerSideProps({ params }) {
  const res = await fetch(`https://api.example.com/posts/${params.id}`);
  const post = await res.json();

  return {
    props: {
      post,
    },
  };
}

export default BlogPost
</code></pre>
<ul>
<li><strong>BlogPost 组件：</strong> 此组件显示一篇博文。它使用 <code>next/head</code> 来管理元标签，这对 SEO 很重要。</li>
<li><strong>getServerSideProps 函数：</strong> 此函数从 API 获取博文数据。它在每次请求此页面时在服务器上运行，确保内容在搜索引擎抓取页面时已准备好进行索引。</li>
</ul>
<h3 id="2">2. 加快加载时间</h3>
<p>搜索引擎如 Google 使用页面加载速度作为排名因素。SSR 可以改善首次加载时间，因为服务器会向浏览器发送一个完全渲染的页面，增强感知性能和用户体验。</p>
<p><strong>优化服务器响应时间：</strong> 确保你的服务器优化以实现快速响应。使用缓存策略以减轻服务器负载。</p>
<p>示例 – SSR 的 cache-control 头部：</p>
<pre><code class="language-javascript">export async function getServerSideProps({ res }) {
  res.setHeader('Cache-Control', 'public, s-maxage=10, stale-while-revalidate=59');

  const resData = await fetch('https://api.example.com/data');
  const data = await resData.json();

  return {
    props: {
      data,
    },
  };
}
</code></pre>
<ul>
<li><strong><code>getServerSideProps</code> 函数：</strong> 此函数设置 cache-control 头以将响应缓存 10 秒，并在重新验证的 59 秒内提供陈旧内容。这样可以提高服务器响应时间和页面加载速度，从而改善 SEO。</li>
</ul>
<h3 id="3">3. 改善社交媒体分享</h3>
<p>在社交媒体上分享链接时，像 Facebook 和 Twitter 这样的平台会抓取 URL 内容以生成预览。SSR 确保必要的元数据在初始 HTML 中可用，从而生成更好的预览并提高点击率。</p>
<p><strong>使用 <code>next/head</code> 管理元标签:</strong> 使用 <code>next/head</code> 组件为社交媒体和SEO添加元标签。</p>
<p>示例 – 向页面添加元标签：</p>
<pre><code class="language-javascript">import Head from 'next/head';

const Page = ({ data }) =&gt; (
  &lt;div&gt;
    &lt;Head&gt;
      &lt;title&gt;{data.title}&lt;/title&gt;
      &lt;meta name="description" content={data.description} /&gt;
      &lt;meta property="og:title" content={data.title} /&gt;
      &lt;meta property="og:description" content={data.description} /&gt;
      &lt;meta property="og:image" content={data.image} /&gt;
      &lt;meta name="twitter:card" content="summary_large_image" /&gt;
    &lt;/Head&gt;
    &lt;h1&gt;{data.title}&lt;/h1&gt;
    &lt;p&gt;{data.content}&lt;/p&gt;
  &lt;/div&gt;
);
</code></pre>
<ul>
<li><strong><code>Page</code>组件：</strong> 该组件使用<code>next/head</code>添加SEO元标签，包括用于社交媒体预览的Open Graph标签。这确保了当页面被分享时，社交媒体平台可以使用所提供的元数据生成丰富的预览。</li>
</ul>
<h3 id="4">4. 增强用户体验</h3>
<p>一个更快、响应更迅速的网站能够提升整体用户体验，从而延长访问时长并降低跳出率。这两个因素都会对 SEO 排名产生积极影响。</p>
<p><strong>使用静态生成（SSG）预渲染较少动态的内容页面：</strong> 对不经常变化的页面使用SSG，以减少服务器负载并提高性能。</p>
<p>示例 – SSG 用于静态页面：</p>
<pre><code class="language-javascript">export async function getStaticProps() {
  const res = await fetch('https://api.example.com/static-data');
  const data = await res.json();

  return {
    props: {
      data,
    },
    revalidate: 10, // 至多每10秒重新验证一次
  };
}

const StaticPage = ({ data }) =&gt; (
  &lt;div&gt;
    &lt;h1&gt;{data.title}&lt;/h1&gt;
    &lt;p&gt;{data.content}&lt;/p&gt;
  &lt;/div&gt;
);

export default StaticPage;
</code></pre>
<ul>
<li><strong><code>StaticPage</code>组件：</strong> 该组件显示从API获取的静态内容。</li>
<li><strong><code>getStaticProps</code>函数：</strong> 此函数在构建时获取数据，并每十秒重新验证一次，确保内容始终新鲜，同时减少服务器负担。</li>
</ul>
<h2 id="">结论</h2>
<p>结合使用服务端渲染和Next.js就像为您的网站在搜索引擎中提供了额外的推动力。利用预构建的内容以及流畅的用户体验，您的网站可以更自然地被更多人看到。</p>
<p>这对任何类型的网站都非常有效，从在线商店到博客。使用Next.js与SSR能够轻松构建一个搜索引擎友好且用户喜欢的网站。</p>
<p>这就是本篇文章的全部内容！如果您想继续交流或者有问题、建议或反馈，欢迎随时联系我的<a href="https://ng.linkedin.com/in/joan-ayebola">LinkedIn</a>。如果您喜欢这篇内容，可以考虑<a href="https://www.buymeacoffee.com/joanayebola">请我喝杯咖啡</a>，以支持更多面向开发人员的内容创作。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
