Как настроить SEO на проекте Next.js: современные подходы и лучшие практики

14 ноября 2025 · ? просмотров · ? мин
Фиолетовый электросамокат вокруг которого отзывы
...
Содержание
Многие проекты на Next.js сталкиваются с тем, что их потенциал в поисковой выдаче остаётся нереализованным: страницы индексируются неполностью, метаданные дублируются, структурированные данные отсутствуют, а ссылки
в социальных сетях отображаются некорректно. Разработчикам приходится вручную собирать решения из разрозненных источников, что приводит
к ошибкам и мешает формировать устойчивый органический трафик.

В данной статье рассмотрены ключевые аспекты настройки SEO в проектах на Next.js: работа с метаданными, генерация sitemap и robots.txt, оптимизация изображений и внедрение структурированных данных.

Введение

SEO (Search Engine Optimization) представляет собой совокупность методов, направленных на повышение видимости веб-ресурса в поисковых системах. Улучшение позиций в выдаче напрямую влияет на рост органического трафика и, как следствие, на эффективность цифровых продуктов. 

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

Плюс к этому, в Next.js удобно управлять маршрутизацией и метаданными, поэтому каждую страницу можно настроить так, как нужно. Всё это делает фреймворк хорошим выбором для проектов, которым важна видимость
в поиске и стабильный органический трафик.
Если вам нужен сайт на React, вы можете обратиться к нам — проконсультируем, предложим оптимальное решение и полностью возьмём на себя разработку и техническую реализацию проекта.
Алексей Чугуев
Коммерческий директор

Метаданные и их роль в SEO

Метаданные содержат информацию о странице, которая не отображается пользователю напрямую, но играет важную роль для поисковых систем
и социальных платформ.

Эти данные размещаются в блоке <head> HTML-документа и помогают поисковым роботам корректно интерпретировать содержимое страницы.

1.1. Установка пакета

Next.js 13+ предлагает встроенное решение для работы с метаданными через App Router.

Однако next-seo остаётся удобным и востребованным инструментом
для проектов на Pages Router, а также в сценариях, где требуется более гибкая и расширенная SEO-настройка.

Для начала установите пакет next-seo в ваш проект Next.js:
bash
npm install next-seo 
#или
yarn add next-seo

1.2. Базовая конфигурация

Создайте файл next-seo.config.js в корне вашего проекта для хранения общих настроек SEO

1.3. Типы метаданных

  • Заголовок (Title): Отображается во вкладке браузера и является ключевым фактором для SEO.
html
<title>Заголовок страницы</title>
  • Описание (Description): Краткое описание содержимого страницы, которое часто отображается в поисковой выдаче.
html
<meta name="description" content="Описание содержимого страницы." />
  • Ключевые слова (Keywords): Устаревший, но все еще используемый тег для указания ключевых слов, связанных с контентом.
  • Open Graph (OG): Метатеги, которые контролируют то, как контент выглядит при публикации в социальных сетях, таких как Facebook или LinkedIn.
html
<meta property="og:title" content="Заголовок для соцсетей" />
<meta property="og:description" content="Описание для соцсетей" />
<meta property="og:image" content="URL_изображения" />
  • Favicon: Небольшая иконка, отображаемая во вкладке с браузера или адресной строке.

1.4. Интеграция в приложение

В проектах на Next.js 13+ с App Router метаданные можно задавать напрямую в файле app/layout.tsx, используя встроенное API:
export const metadata = {
  title: {
    default: 'Заголовок сайта по умолчанию',
    template: '%s | Название сайта',
  },
  description: 'Описание сайта по умолчанию',
  metadataBase: new URL('https://your-domain.com'),
  openGraph: {
    title: 'Заголовок для соцсетей',
    description: 'Описание для соцсетей',
    images: ['/og-image.jpg'],
  },
};
Для проектов, использующих Pages Router, можно по-прежнему подключать глобальные настройки через _app.tsxс помощью next-seo:
import { NextSeo } from 'next-seo';
import defaultSEOConfig from '../next-seo.config';

export function MyApp({ Component, pageProps }) {
  return (
    <>
      <NextSeo {...defaultSEOConfig} />
      <Component {...pageProps} />
    </>
  );
}

Использование NextSeo на страницах

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

Ниже рассмотрены ключевые возможности работы с NextSeo в реальных сценариях.

2.1. Динамические метаданные

Для каждой страницы вы можете импортировать и использовать компонент NextSeo для переопределения или дополнения глобальных настроек:

2.2. Расширенные опции

NextSeo предоставляет множество опций для тонкой настройки:

  • noindex и nofollow: Управление индексацией страниц.
  • titleTemplate: Шаблон для заголовков страниц (например, %s | Название сайта).
  • additionalMetaTags и additionalLinkTags: Добавление произвольных метатегов и ссылок.

Управление индексацией: robots.txt
и sitemap.xml

Для эффективного взаимодействия с поисковыми роботами необходимо правильно настроить файлы robots.txt и sitemap.xml.

Файл robots.txt — Инструкция для роботов
“Что сканировать нельзя”

Файл robots.txt — это текстовый документ, который размещается в корне сайта (например - https://example.com/robots.txt) и сообщает поисковым роботам, какие разделы ресурса можно сканировать, а какие — нет.

При работе с Next.js 13+ и App Router правила для robots.txt определяются
в файле app/robots.ts, без необходимости создавать файл вручную.
import { MetadataRoute } from 'next';

export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: '*',
      allow: '/',
      disallow: ['/admin/', '/api/'],
    },
    sitemap: 'https://example.com/sitemap.xml',
  };
}
Файл выполняет рекомендательную функцию: поисковые роботы придерживаются его правил добровольно. Корректные поисковики (Google, Яндекс и др.) учитывают указанные ограничения, но вредоносные или нестандартные боты могут их полностью игнорировать.

Поэтому robots.txt не подходит для сокрытия конфиденциальной информации — такие данные следует защищать другими инструментами.

Базовая структура и директивы:
User-agent: [Имя_робота]
Disallow: [Путь_к_запрещенной_области]
Allow: [Путь_к_разрешенной_области_внутри_запрещенной]
Sitemap: [URL_вашей_карты_сайта]
  • User-agent: Определяет, для какого поискового робота предназначены правила. * означает “все роботы”.
  • Disallow: Указывает путь или папку, которую нельзя сканировать. Пустая строка Disallow: означает “разрешено все”.
  • Allow: Используется, чтобы сделать исключение внутри запрещенной директории. Особенно полезно для робота Яндекс.
  • Sitemap: Указывает полный URL на ваш файл sitemap. Рекомендуется всегда добавлять.
Примеры:

1. Стандартный разрешающий файл (для большинства сайтов):
User-agent: *
Disallow: /admin/
Disallow: /private/
Disallow: /tmp/
Allow: /public/assets/
Sitemap: https://example.com/sitemap.xml
2. Полный запрет сканирования (для сайта в разработке):
User-agent: *
Disallow: /
3. Запрет сканирования для определенного робота:
User-agent: Yandex
Disallow: /cgi-bin
Disallow: /?sort=

User-agent: *
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml
Здесь роботу Яндекса запрещены дополнительные пути, включая URL
с параметрами /?sort=.
Чего НЕЛЬЗЯ блокировать через robots.txt:

  • Конфиденциальные данные (используйте пароль или noindex).
  • Важные для SEO страницы (CSS, JS). Современные роботы Google умеют их интерпретировать.

Файл sitemap.xml — Приглашение для роботов
“Вот самые важные страницы”

Это XML-файл, который содержит список всех важных URL вашего сайта вместе с дополнительной мета-информацией (дата последнего изменения, частота обновления, приоритет).

Его цель — помочь роботам обнаружить и быстрее проиндексировать
ваш контент.

Базовая структура:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2023-10-25</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/about</loc>
    <lastmod>2023-10-20</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://example.com/blog/post-1</loc>
    <lastmod>2023-10-26</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.6</priority>
  </url>
</urlset>
  • <loc>: Полный URL страницы (обязательный тег).
  • <lastmod>: Дата последнего изменения в формате ГГГГ-ММ-ДД (рекомендуется).
  • <changefreq>: Примерная частота изменений.
  • <priority>: Приоритетность URL относительно других.

Практические советы по sitemap:

  1. Включайте только канонические URL.
  2. Размер: не более 50 000 URL или 50 МБ.
  3. Используйте индекс sitemap, если URL больше лимита:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-posts.xml</loc>
    <lastmod>2023-10-26</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
    <lastmod>2023-10-25</lastmod>
  </sitemap>
</sitemapindex>

Генерируйте автоматически.

При использовании App Router в Next.js 13+ sitemap можно создавать нативно, определив соответствующую конфигурацию в файле app/sitemap.ts, без необходимости подключать сторонние библиотеки.
import { MetadataRoute } from 'next';

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    {
      url: 'https://example.com',
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 1,
    },
    {
      url: 'https://example.com/about',
      lastModified: new Date(),
      changeFrequency: 'yearly',
      priority: 0.8,
    },
  ];
}
Для проектов, использующих Pages Router, удобно применять пакет next-sitemap.

1 - Установка next-sitemap:
npm install next-sitemap
2 - Создание файла конфигурации:
/** @type {import('next-sitemap').IConfig} */
module.exports = {
  siteUrl: process.env.SITE_URL || 'https://example.com',
  generateRobotsTxt: true,
  changefreq: 'daily',
  priority: 0.7,
  sitemapSize: 7000,
  outDir: 'public',
}
3 - Добавьте скрипт в package.json:
{
  "build": "next build",
  "postbuild": "next-sitemap"
}

Синергия: Как robots.txt и sitemap.xml работают вместе

Нужно указать расположение sitemap прямо в robots.txt.
User-agent: *
Disallow: /admin/
Disallow: /cart/
Sitemap: https://example.com/sitemap.xml
Что делать после настройки?

  1. Проверьте файлы через Google Search Console и Яндекс.Вебмастер.
  2. Добавьте sitemap вручную в панели вебмастеров.
  3. Обновляйте sitemap регулярно, если публикуете контент.
Итог:

  • robots.txt — “сторож”, контролирующий зону доступа.
  • sitemap.xml — “гид”, показывающий важные страницы.
Корректно настроенные robots.txt и sitemap.xml помогают поисковым системам быстрее ориентироваться на сайте и индексировать его ровно так, как вам нужно.

Работа с JSON-LD для структурированных данных

Структурированные данные помогают поисковым системам лучше понять содержание вашей страницы и могут привести к появлению расширенных результатов поиска (rich snippets). next-seo предоставляет компоненты для генерации JSON-LD.

3.1. Компоненты JSON-LD

next-seo включает предварительно настроенные компоненты JSON-LD
для различных типов контента:

  • ArticleJsonLd: Для статей и блог-постов.
  • ProductJsonLd: Для товаров.
  • FAQPageJsonLd: для страниц с вопросами и ответами.
  • И другие.

3.2. Пример использования ArticleJsonLd

jsx
import { ArticleJsonLd } from 'next-seo';

const BlogPostPage = ({ post }) => {
  return (
    <>
      <ArticleJsonLd
        useAppDir={true} // Если используете Next.js 13+ с директорией app
        url={`https://your-site.com/blog/${post.slug}`}
        title={post.title}
        description={post.excerpt}
        datePublished={post.publishedAt}
        authorName={post.author.name}
        publisherName="Название вашего сайта"
        publisherLogo="https://your-site.com/logo.png"
        images={[post.image]}
      />
      {/* Остальная часть страницы */}
    </>
  );
};

3.3. Пример использования FAQPageJsonLd

Для страниц с часто задаваемыми вопросами:
jsx
import { FAQPageJsonLd } from 'next-seo';

const FAQPage = () => {
  return (
    <>
      <FAQPageJsonLd
        mainEntity={[
          {
            questionName: "Как начать работу?",
            acceptedAnswer: "Чтобы начать, зарегистрируйтесь на нашем сайте.",
          },
          {
            questionName: "Какие методы оплаты вы принимаете?",
            acceptedAnswer: "Мы принимаем кредитные карты и PayPal.",
          },
        ]}
      />
      {/* Содержимое страницы */}
    </>
  );
};

Оптимизация для социальных сетей

Чтобы ссылки на ваш сайт выглядели привлекательно при публикации
в соцсетях, важно корректно настроить метаданные. next-seo позволяет быстро управлять Open Graph и Twitter-картами, задавая необходимые параметры прямо на уровне компонентов.

Далее — основные настройки и примеры их применения.

4.1. Open Graph протокол

Протокол Open Graph используется социальными сетями, такими как Facebook и LinkedIn, для форматирования контента при публикации ссылок. next-seo упрощает добавление Open Graph тегов через проп openGraph:
jsx
<NextSeo
  openGraph={{
    title: "Заголовок для соцсетей",
    description: "Описание для соцсетей",
    url: "https://your-site.com/page",
    type: "article",
    article: {
      publishedTime: "2023-01-01T00:00:00Z",
      modifiedTime: "2023-01-02T00:00:00Z",
      authors: ["https://your-site.com/author/john-doe"],
      tags: ["тег1", "тег2"],
    },
    images: [
      {
        url: "https://your-site.com/og-image.jpg",
        width: 800,
        height: 600,
        alt: "Описание изображения",
      },
    ],
  }}
/>
:cite[2]:cite[4]

4.2. Twitter Cards

Для оптимизации отображения в Twitter используйте проп twitter:
jsx
<NextSeo
  twitter={{
    handle: "@handle",
    site: "@site",
    cardType: "summary_large_image",
  }}
/>
:cite[2]
Примечание: Twitter автоматически использует некоторые Open Graph теги (например, og:title, og:image, og:description), поэтому явное указание twitter:title, twitter:image и twitter:description не требуется и может привести
к дублированию.

Дополнительные возможности

Помимо основных SEO-настроек, next-seo позволяет добавлять расширенные элементы, которые делают страницу более понятной для поисковых систем. Они не обязательны для каждого проекта, но в ряде случаев заметно повышают качество представления сайта в выдаче.
jsx
import { BreadcrumbJsonLd } from 'next-seo';

const ProductPage = ({ product }) => {
  return (
    <>
      <BreadcrumbJsonLd
        itemListElements={[
          {
            position: 1,
            name: "Главная",
            item: "https://your-site.com",
          },
          {
            position: 2,
            name: "Категория",
            item: "https://your-site.com/category",
          },
          {
            position: 3,
            name: product.name,
            item: `https://your-site.com/product/${product.id}`,
          },
        ]}
      />
      {/* Содержимое страницы */}
    </>
  );
};
:cite[2]:cite[8]

5.1. Хлебные крошки (Breadcrumbs)

next-seo предоставляет компонент BreadcrumbJsonLd для добавления структурированных данных о навигационной цепочке:

5.2. Поиск сайтлинков (Sitelinks SearchBox)

Если на вашем сайте есть поиск, вы можете помочь Google понять
его с помощью SiteLinksSearchBoxJsonLd:
jsx
import { SiteLinksSearchBoxJsonLd } from 'next-seo';

const HomePage = () => {
  return (
    <>
      <SiteLinksSearchBoxJsonLd
        url="https://your-site.com"
        potentialActions={[
          {
            target: "https://your-site.com/search?q",
            queryInput: "search_term_string",
          },
        ]}
      />
      {/* Содержимое страницы */}
    </>
  );
};
:cite[2]:cite[8]

Лучшие практики и распространенные ошибки

Эффективная SEO-оптимизация требует не только правильной настройки инструментов, но и понимания принципов, которые позволяют добиться устойчивых результатов.

6.1. Лучшие практики

  • Уникальные метаданные для каждой страницы: Избегайте дублирования заголовков и описаний.
  • Используйте канонические URL: Указывайте канонические URL для борьбы с дублирующимся контентом.
  • Оптимизируйте изображения для Open Graph: Используйте изображения рекомендуемых размеров (1200x630 пикселей для Facebook).
  • Проверяйте ваши данные: Используйте инструменты Google Search Console и Rich Results Test для проверки структурированных данных.

6.2. Распространенные ошибки

  • Дублирование метатегов: Избегайте одновременного использования next-seo и встроенного Head из Next.js для одних и тех же тегов.
  • Неполные данные: Убедитесь, что вы предоставляете все обязательные поля для выбранного типа структурированных данных.
  • Игнорирование социальных сетей: Не забывайте настраивать Open Graph и Twitter карточки для улучшения шаринга в соцсетях.

Заключение

При грамотной интеграции next-seo становится удобным инструментом, который значительно ускоряет настройку SEO в проектах на Next.js.

Он берет на себя большую часть рутинных задач, освобождая время
для работы над содержанием и развитием продукта.

Ключевые преимущества next-seo:

  • Сокращение шаблонного кода: готовые компоненты и конфигурации упрощают работу.
  • Поддержка JSON-LD: добавление структурированных данных становится значительно проще.
  • Интеграция с социальными платформами: лёгкая настройка Open Graph и Twitter Card.
  • Гибкость: возможность глобальной настройки и переопределения на уровне отдельных страниц.
  • Совместимость: корректная работа как с Pages Router, так и с App Router.

Выбор подхода

  • Next.js 13+ (App Router): используйте встроенную систему метаданных, дополняя её next-seo для JSON-LD и сложных SEO-сценариев.
  • Next.js Pages Router: next-seo выступает основным и наиболее удобным решением для SEO-настройки.
  • Гибридный вариант: сочетайте возможности App Router и next-seo, если проект требует расширенной SEO-структуры.

Применение next-seo вместе с лучшими практиками технической оптимизации помогает укрепить позиции веб-приложения в поисковой выдаче и улучшить видимость в социальных сетях, что в перспективе способствует стабильному росту органического трафика и укреплению продукта на рынке.
Оценить материал
Остальные статьи по react