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

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

Важным элементом 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://alexeybaranov.dev/robots.txt и выглядит следующим образом:

# *
User-agent: *
Allow: /

# Host
Host: https://alexeybaranov.dev/

# Sitemap
Sitemap: https://alexeybaranov.dev/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://alexeybaranov.dev/sitemap.xml",
    host: "https://alexeybaranov.dev/",
  };
}

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

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

Host: https://alexeybaranov.dev/
Sitemap: https://alexeybaranov.dev/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://alexeybaranov.dev/sitemap.xml",
  };
}

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

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

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

Sitemap: https://alexeybaranov.dev/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 валидно и будет работать как и задумано, можно воспользоваться несколькими бесплатными инструментами:

На этом всё! 🎉

Подписывайтесь на мой Youtube канал, Telegram и на сообщество Вконтакте 🙂

Поделиться

Поддержать автора

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

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

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

9 мин.

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

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

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

5 мин.

Рассказ о том как я счётчик Яндекс Метрики к блогу подключал...