DevGang
Авторизоваться

Как использовать серверный рендеринг в приложениях Next.js для лучшего SEO

Серверный рендеринг (SSR) — это метод веб-разработки, который может помочь улучшить SEO вашего сайта. Это достигается путем создания HTML-контента на сервере в ответ на запрос пользователя.

Этот подход контрастирует с рендерингом на стороне клиента (CSR), где контент доставляется в виде базовой оболочки HTML, а JavaScript извлекает и отображает данные в браузере.

SSR предлагает значительные преимущества в области SEO, что делает его идеальным для Next.js, популярного фреймворка React. Давайте обсудим, как использование SSR с Next.js может повысить видимость вашего сайта в поисковых системах.

Что такое серверный рендеринг?

Серверный рендеринг (SSR) — это метод веб-разработки, при котором веб-сервер генерирует полный HTML-контент веб-страницы перед отправкой его в браузер пользователя.

Это отличается от рендеринга на стороне клиента (CSR), когда браузер загружает базовую структуру HTML, а затем использует JavaScript для получения и отображения контента.

Как начать работу с Next.js и SSR

Начало работы с Next.js и рендерингом на стороне сервера (SSR) включает несколько шагов. Вот пошаговое руководство, которое поможет вам настроить проект Next.js и реализовать SSR.

Шаг 1. Установите Next.js

Сначала вам нужно установить Next.js. Вы можете сделать это с помощью create-next-app, который настраивает новый проект Next.js с конфигурацией по умолчанию. Запустите следующую команду в своем терминале:

npx create-next-app my-next-app
cd my-next-app
npm run dev

Эта команда создает новое приложение Next.js в папке my-next-app и запускает сервер разработки.

Шаг 2. Понимание структуры проекта

Next.js организует проект с помощью некоторых папок и файлов по умолчанию:

  • pages/: эта папка содержит все страницы вашего приложения. Каждый файл представляет маршрут в вашем приложении.
  • public/: здесь можно размещать статические ресурсы, такие как изображения.
  • Styles/: содержит файлы CSS для стилизации вашего приложения.

Шаг 3. Создайте простую страницу с помощью SSR

Теперь давайте создадим простую страницу, использующую SSR.

Создайте новый файл pages/index.js:

// pages/index.js
import React from 'react';

const Home = ({ data }) => {
  return (
    <div>
      <h1>Welcome to Next.js with SSR</h1>
      <p>Data fetched from the server: {data.message}</p>
    </div>
  );
};

export async function getServerSideProps() {
  // Fetch data from an API or other sources
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();

  // Return the data as props to the Home component
  return {
    props: {
      data,
    },
  };
}

export default Home;

Давайте обсудим этот код более подробно. Для домашнего компонента:

  • Компонент Home — это функциональный компонент, который принимает реквизиты.
  • Проп data содержит данные, полученные с сервера.
  • Внутри компонента мы отображаем приветственное сообщение и полученные данные.

Функция getServerSideProps:

  • Эта функция экспортируется из файла Pages/index.js.
  • Он выполняется на сервере для каждого запроса к этой странице.
  • Внутри этой функции вы можете выполнять асинхронные операции, такие как получение данных из внешнего API.
  • Извлеченные данные возвращаются как объект с ключом реквизита. Этот объект будет передан компоненту Home в качестве реквизита.

Вы можете добавить обработку ошибок в функцию getServerSideProps, чтобы управлять любыми проблемами, которые могут возникнуть во время выборки данных. Вот пример:

export async function getServerSideProps() {
  try {
    const res = await fetch('https://api.example.com/data');
    if (!res.ok) {
      throw new Error('Failed to fetch data');
    }
    const data = await res.json();
    return {
      props: {
        data,
      },
    };
  } catch (error) {
    console.error(error);
    return {
      props: {
        data: { message: 'Error fetching data' },
      },
    };
  }
}

Шаг 4. Запустите приложение

Запустите сервер разработки, если он еще не запущен:

npm run dev

Откройте браузер и перейдите по адресу http://localhost:3000. Вы должны увидеть сообщение, полученное из API, отображаемое на странице.

Как Next.js обеспечивает рендеринг на стороне сервера

Next.js предоставляет простой способ включить SSR и генерацию статического сайта (SSG). По умолчанию он предварительно отображает каждую страницу. В зависимости от варианта использования вы можете выбирать между SSR и SSG:

  • Серверный рендеринг (SSR): страницы обрабатываются при каждом запросе.
  • Генерация статического сайта (SSG): страницы генерируются во время сборки.

Next.js определяет, какой метод рендеринга использовать, на основе функций, которые вы реализуете в компонентах страницы (getStaticProps и getServerSideProps).

Компоненты страницы Next.js

Next.js использует каталог страниц/ для определения маршрутов. Каждый файл в этом каталоге соответствует маршруту вашего приложения.

  • pages/index.js → /
  • pages/about.js → /about
  • pages/posts/[id].js → /posts/:id

Вот базовый пример компонента страницы:

// pages/index.js
import React from 'react';

const Home = () => {
  return (
    <div>
      <h1>Welcome to Next.js</h1>
      <p>This is the home page.</p>
    </div>
  );
};

export default Home;

Получение данных с помощью getStaticProps и getServerSideProps

getStaticProps используется для статической генерации. Он запускается во время сборки и позволяет вам получать данные и передавать их на вашу страницу в качестве реквизита. Используйте это для данных, которые не меняются часто.

Пример:

// pages/index.js
import React from 'react';

const Home = ({ posts }) => {
  return (
    <div>
      <h1>Blog Posts</h1>
      <ul>
        {posts.map(post => (
          <li key={post.id}>{post.title}</li>
        ))}
      </ul>
    </div>
  );
};

// This function runs at build time
export async function getStaticProps() {
  // Fetch data from an API
  const res = await fetch('https://jsonplaceholder.typicode.com/posts');
  const posts = await res.json();

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

export default Home;

getServerSideProps используется для рендеринга на стороне сервера. Он запускается при каждом запросе и позволяет получать данные во время запроса.

Пример:

// pages/index.js
import React from 'react';

const Home = ({ data }) => {
  return (
    <div>
      <h1>Server-Side Rendering with Next.js</h1>
      <p>Data fetched from the server: {data.message}</p>
    </div>
  );
};

// This function runs on every request
export async function getServerSideProps() {
  // Fetch data from an external API
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();

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

export default Home;

Преимущества SSR для SEO с помощью Next.js и способы оптимизации

В этом разделе мы рассмотрим основные преимущества использования SSR для SEO и дадим простые советы о том, как максимально эффективно использовать эти преимущества с помощью вашего приложения Next.js.

1. Улучшенная индексация поисковыми системами.

Рендеринг на стороне клиента (CSR) может вызвать проблемы с поисковыми системами, которые не могут правильно индексировать контент, поскольку он отображается в браузере пользователя с помощью JavaScript.

Однако SSR отображает контент на сервере перед отправкой его в браузер пользователя, гарантируя, что HTML-код является полным и его можно легко сканировать и индексировать поисковыми системами.

Используйте SSR для важных страниц. Убедитесь, что ключевые страницы, такие как целевые страницы, сообщения в блогах и страницы продуктов, отображаются на сервере, чтобы облегчить индексацию.

Пример. Использование SSR для страницы сообщения в блоге:

// pages/blog/[id].js
import React from 'react';
import { useRouter } from 'next/router';
import Head from 'next/head';

const BlogPost = ({ post }) => {
  const router = useRouter();
  if (router.isFallback) {
    return <div>Loading...</div>;
  }

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

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

Компонент BlogPost: этот компонент отображает сообщение в блоге. Он использует next/head для управления метатегами, которые важны для SEO.

Функция getServerSideProps: эта функция извлекает данные для публикации в блоге из API. Он запускается на сервере при каждом запросе к этой странице, гарантируя, что контент будет готов к индексации поисковыми системами при сканировании страницы.

2. Ускоренная загрузка

Поисковые системы, такие как Google, используют скорость загрузки страницы как фактор ранжирования. SSR может сократить время начальной загрузки, поскольку сервер отправляет в браузер полностью визуализированную страницу, повышая воспринимаемую производительность и удобство работы с пользователем.

Оптимизируйте время ответа сервера. Убедитесь, что ваш сервер оптимизирован для быстрого ответа. Используйте стратегии кэширования, чтобы снизить нагрузку на сервер.

Пример – заголовок управления кэшем для SSR:

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,
    },
  };
}
  • Функция getServerSideProps: эта функция устанавливает заголовки управления кэшем для кэширования ответа на 10 секунд и обслуживания устаревшего контента при повторной проверке в течение 59 секунд. Это улучшает время ответа сервера и скорость загрузки страниц, способствуя улучшению SEO.

3. Улучшение обмена информацией в социальных сетях

При обмене ссылками в социальных сетях такие платформы, как Facebook и Twitter, сканируют содержимое URL-адреса для создания предварительного просмотра. SSR гарантирует наличие необходимых метаданных в исходном HTML-коде, что приводит к улучшению предварительного просмотра и повышению рейтинга кликов.

Управляйте метатегами с помощью next/head. Используйте компонент next/head для добавления метатегов для социальных сетей и SEO.

Пример – Добавление метатегов на страницу:

import Head from 'next/head';

const Page = ({ data }) => (
  <div>
    <Head>
      <title>{data.title}</title>
      <meta name="description" content={data.description} />
      <meta property="og:title" content={data.title} />
      <meta property="og:description" content={data.description} />
      <meta property="og:image" content={data.image} />
      <meta name="twitter:card" content="summary_large_image" />
    </Head>
    <h1>{data.title}</h1>
    <p>{data.content}</p>
  </div>
);
  • Компонент страницы: этот компонент использует next/head для добавления метатегов SEO, включая теги Open Graph для предварительного просмотра в социальных сетях. Это гарантирует, что при совместном использовании страницы платформы социальных сетей смогут создавать расширенные предварительные просмотры с предоставленными метаданными.

4. Улучшенный пользовательский опыт

Более быстрый и отзывчивый веб-сайт повышает общее качество обслуживания пользователей, что приводит к увеличению продолжительности посещений и снижению показателей отказов. Оба фактора положительно влияют на ваш рейтинг в SEO.

Предварительная обработка страниц со статической генерацией (SSG) для менее динамичного контента. Используйте SSG для страниц, которые не часто меняются, чтобы снизить нагрузку на сервер и повысить производительность.

Пример. Использование SSG для статической страницы:

export async function getStaticProps() {
  const res = await fetch('https://api.example.com/static-data');
  const data = await res.json();

  return {
    props: {
      data,
    },
    revalidate: 10, // Revalidate at most once every 10 seconds
  };
}

const StaticPage = ({ data }) => (
  <div>
    <h1>{data.title}</h1>
    <p>{data.content}</p>
  </div>
);

export default StaticPage;

Компонент StaticPage: этот компонент отображает статический контент, полученный из API.

Функция getStaticProps: эта функция извлекает данные во время сборки и проверяет их каждые 10 секунд, гарантируя, что контент всегда будет свежим, одновременно снижая нагрузку на сервер.

Заключение

Совместное использование серверного рендеринга и Next.js — это все равно, что дать вашему сайту дополнительный импульс для поисковых систем. Благодаря предварительно созданному контенту для поисковых систем и удобству работы с посетителями ваш сайт настроен так, чтобы его естественным образом увидело больше людей.

Это отлично работает для любого типа веб-сайта, от интернет-магазинов до блогов. Next.js с SSR позволяет легко создать веб-сайт, который нравится поисковым системам и нравится пользователям.

Источник:

#JavaScript #Next.js
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу