Добавляем robots.txt в Next.js приложение

Инструкция по добавлению robots.txt в Next.js приложение.

Добавляем robots.txt в Next.js приложение
Дата публикации
13.03.25
Время чтения
5 мин.
Автор
Алексей Баранов

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

Что такое robots.txt?

Robots.txt - это текстовый файл, основанный на спецификации Robots Exclusion Protocol, который сообщает поисковым роботам (например Googlebot или Yandex), какие страницы они могут сканировать, а какие нет.

А так же указывает на файл sitemap.xml. О том что это такое и как добавить файл sitemap.xml читайте в статье «Добавляем sitemap.xml в Next.js приложение».

Robots.txt должен находиться в корневой папке вашего сайта, и обычно доступен по адресу:

домен.зона/robots.txt

Например, у этого блога он лежит по адресу https://baranov.guru/robots.txt и выглядит следующим образом:

# *
User-agent: *
Allow: /

# Host
Host: https://baranov.guru/

# Sitemap
Sitemap: https://baranov.guru/sitemap.xml

Более подробную информацию о том как как поисковые системы обрабатывают файлы robots.txt можно найти в справке от Яндекса или документации Google.

Первый способ: Добавляем статический файл

Первый способ - очень простой. Next.js из коробки умеет отдавать статические файлы, например изображения, добавленные в папку public в корне проекта.

Этот же подход можно использовать для добавления файла robots.txt. Всё что необходимо сделать - добавить файл в папку public.

Подробнее про работу со статикой и папку public можно почитать в официальной документации Next.js.

Альтернативный способ добавления статического файла

Начиная с версии 13.3 Next.js умеет корректно обрабатывать статический файл robots.txt лежащий в корне папки app.

Подробнее в документации.

Второй способ: Динамическая генерация robots.txt

Для того чтобы динамически создавать файл robots.txt необходимо в папку app добавить файл robots.js или robots.ts, который будет возвращать объект типа MetadataRoute.Robots.

import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: "*",
      allow: "/",
      disallow: "/private/",
    },
    sitemap: "https://baranov.guru/sitemap.xml",
    host: "https://baranov.guru/",
  };
}

Данный код сгенерирует файл со следующим содержимым:

User-Agent: *
Allow: /
Disallow: /private/

Host: https://baranov.guru/
Sitemap: https://baranov.guru/sitemap.xml

Кастомизация настроек в зависимости от user-agent

Так же есть возможность добавлять правила для различных user-agent.

import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      {
        userAgent: "Googlebot",
        allow: ["/"],
        disallow: "/private/",
      },
      {
        userAgent: ["Yandex", "Bingbot"],
        disallow: ["/"],
      },
    ],
    sitemap: "https://baranov.guru/sitemap.xml",
  };
}

На выходе получим следующий файл:

User-Agent: Googlebot
Allow: /
Disallow: /private/

User-Agent: Yandex
User-Agent: Bingbot
Disallow: /

Sitemap: https://baranov.guru/sitemap.xml

Спецификация MetadataRoute.Robots

Вот полная спецификация MetadataRoute.Robots, взятая из официальной документации.

type Robots = {
  rules:
    | {
        userAgent?: string | string[];
        allow?: string | string[];
        disallow?: string | string[];
        crawlDelay?: number;
      }
    | Array<{
        userAgent: string | string[];
        allow?: string | string[];
        disallow?: string | string[];
        crawlDelay?: number;
      }>;
  sitemap?: string | string[];
  host?: string;
};

Минусы динамической генерации и директива Clean-Param

К сожалению, динамическая генерация не поддерживает добавление кастомных директив в правила. Самым ярким примером кастомной директивы можно считать директиву Clean-Param, поддерживаемую Яндексом.

Для того чтобы её добавить придётся воспользовать либо первым способом (статический файл) либо каким-нибудь сторонним решением, например npm-пакетом next-sitemap.

Бонус: Валидация robots.txt

Для того чтобы удостовериться что содержимое robots.txt валидно и будет работать как и задумано, можно воспользоваться несколькими бесплатными инструментами:

На этом всё! 🎉

Расскажите о вашем проекте

Связаться иначе

Вам может быть интересно

Добавляем sitemap.xml в Next.js приложение
Добавляем sitemap.xml в Next.js приложение

Добавляем sitemap.xml в Next.js приложение

9 мин.

Инструкция по добавлению sitemap.xml в Next.js приложение...

Пост#nextjs#seo
Добавляем Not Found (404) страницу в Next.js приложение
Добавляем Not Found (404) страницу в Next.js приложение

Добавляем Not Found (404) страницу в Next.js приложение

3 мин.

Инструкция по добавлению Not Found (404) страницы в Next.js приложение...

Пост#nextjs#seo
Добавляем JSON-LD разметку к блогу на Next.js
Добавляем JSON-LD разметку к блогу на Next.js

Добавляем JSON-LD разметку к блогу на Next.js

8 мин.

Инструкция по добавлению JSON-LD разметки к блогу на Next.js...

Пост#nextjs#seo
Подключение счётчика Яндекс Метрики к Next.js приложению
Подключение счётчика Яндекс Метрики к Next.js приложению

Подключение счётчика Яндекс Метрики к Next.js приложению

13 мин.

Инструкция по добавлению счётчика Яндекс Метрики к Next.js блогу...

Пост#nextjs#yandex
Валидатор robots.txt
Валидатор robots.txt

Валидатор robots.txt

Проверьте robots.txt: разбор правил, замечания по RFC 9309, список sitemap и групп user-agent — прямо в браузере.

Инструмент#seo#robots
Frontend разработка
Frontend разработка

Frontend разработка

Разрабатываем интерфейсы, которые быстро работают, удобно используются и масштабируются вместе с продуктом.

Услуга#frontend#веб-разработка
Разработка вебсайтов
Разработка вебсайтов

Разработка вебсайтов

Сайт под ваш бизнес: от структуры и дизайна до запуска и масштабирования. Быстро, продуманно и с фокусом на результат.

Услуга#веб-разработка#сайты