Пошук уроків, статей та іншого контенту
Створите robots.txt у Next.js і налаштуєте правила доступу пошукових роботів до розділів сайту.
robots.txtrobots.txt — це текстовий файл у корені сайту, який повідомляє пошуковим роботам, які URL вони можуть або не можуть сканувати.
Файл доступний за адресою:
https://example.com/robots.txtЗа допомогою robots.txt можна, наприклад:
дозволити сканування всього сайту;
заборонити доступ до адміністративної частини;
заборонити сканування особистого кабінету;
вказати адресу карти сайту sitemap.xml.
Важливо: robots.txt не захищає дані. Це лише інструкція для пошукових роботів. Будь-хто може відкрити цей файл і спробувати перейти до забороненого URL.
robots.txt у Next.jsУ Next.js з App Router файл можна створити як спеціальний файл app/robots.ts.
Структура проєкту:
my-next-app/
├── app/
│ ├── layout.tsx
│ ├── page.tsx
│ └── robots.ts
├── public/
├── package.json
└── ...Файл app/robots.ts автоматично буде доступний за адресою /robots.txt.
Створіть файл app/robots.ts:
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
},
}
}Ця конфігурація означає:
userAgent: '*' — правило застосовується до всіх пошукових роботів;
allow: '/' — дозволено сканувати всі розділи сайту.
Після запуску застосунку відкрийте:
http://localhost:3000/robots.txtNext.js згенерує приблизно такий результат:
User-agent: *
Allow: /Щоб заборонити сканування певних розділів, використовуйте властивість disallow.
Наприклад:
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: ['/admin/', '/dashboard/', '/private/'],
},
}
}Результат:
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /dashboard/
Disallow: /private/Тепер пошуковим роботам дозволено сканувати сайт загалом, але не рекомендується сканувати такі URL:
/admin/
/dashboard/
/private/Завершальний символ / допомагає явно вказати весь розділ. Наприклад, правило /admin/ стосується URL на кшталт:
/admin/
/admin/users
/admin/settingsМожна задати кілька груп правил. Кожна група має власне значення userAgent.
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{
userAgent: '*',
allow: '/',
disallow: ['/admin/', '/dashboard/'],
},
{
userAgent: 'SomeBot',
disallow: ['/'],
},
],
}
}У цьому прикладі:
усім роботам дозволено сканувати публічну частину сайту;
усім роботам заборонено розділи /admin/ і /dashboard/;
роботу з іменем SomeBot заборонено сканувати весь сайт.
На практиці найчастіше достатньо правила для всіх роботів:
userAgent: '*'Якщо сайт має карту сайту за адресою /sitemap.xml, її можна вказати у robots.ts:
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: ['/admin/', '/dashboard/'],
},
sitemap: 'https://example.com/sitemap.xml',
}
}У результаті Next.js додасть рядок:
Sitemap: https://example.com/sitemap.xmlВикористовуйте повну адресу з протоколом https://. Значення https://example.com потрібно замінити на справжній домен вашого сайту.
Не вказуйте карту сайту, якщо файл /sitemap.xml ще не існує.
publicДля простих проєктів можна створити звичайний текстовий файл:
public/robots.txtВміст файлу:
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /dashboard/У Next.js файли з папки public доступні від кореня сайту. Тому файл:
public/robots.txtбуде доступний як:
/robots.txtВикористовуйте один підхід:
app/robots.ts для спеціального файлу Next.js;
public/robots.txt для звичайної статичної конфігурації.
Не створюйте обидва файли одночасно, оскільки вони відповідають за одну й ту саму адресу.
Припустімо, сайт має такі розділи:
/ — головна сторінка;
/articles/ — публічні статті;
/pricing/ — сторінка з тарифами;
/admin/ — адміністративна панель;
/account/ — особистий кабінет.
Для такого сайту можна створити app/robots.ts:
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: ['/', '/articles/', '/pricing/'],
disallow: ['/admin/', '/account/'],
},
sitemap: 'https://example.com/sitemap.xml',
}
}Такий запис явно дозволяє публічні розділи та забороняє приватні.
На практиці allow: '/' уже дозволяє весь сайт, тому достатньо коротшого варіанта:
import type { MetadataRoute } from 'next'
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: '*',
allow: '/',
disallow: ['/admin/', '/account/'],
},
sitemap: 'https://example.com/sitemap.xml',
}
}Після запуску Next.js:
npm run devвідкрийте у браузері:
http://localhost:3000/robots.txtПеревірте, що:
файл відкривається без помилки;
правила мають правильні шляхи;
приватні розділи не пропущені;
адреса карти сайту вказує на правильний домен.
Також перевірте production-версію після розгортання, адже саме її скануватимуть пошукові роботи.
robots.txt як захистЗаборона в robots.txt не робить сторінку приватною. URL все одно може бути відкритий без авторизації, якщо в застосунку немає справжньої перевірки доступу.
Для захисту приватних даних використовуйте автентифікацію та авторизацію на сервері.
Правило:
Disallow: /admin/не обов’язково забороняє URL:
/administrator/Шляхи мають точно відповідати структурі сайту.
Таке правило блокує сканування всіх сторінок:
User-agent: *
Disallow: /Використовуйте його лише тоді, коли справді потрібно повністю заборонити сканування.
Якщо вказати:
Sitemap: https://example.com/sitemap.xmlале /sitemap.xml не існує, робот не зможе скористатися цією адресою.
Для динамічного варіанта файл має бути саме тут:
app/robots.tsДля статичного варіанта:
public/robots.txtФайл в іншій папці не буде автоматично доступний як /robots.txt.
robots.txt керує рекомендаціями щодо сканування сайту пошуковими роботами.
У Next.js з App Router його можна створити у файлі app/robots.ts.
userAgent визначає, для яких роботів діє правило.
allow дозволяє сканування URL.
disallow забороняє сканування окремих розділів.
sitemap вказує адресу карти сайту.
robots.txt не захищає сторінки та дані від користувачів.
Для простого статичного файла можна використати public/robots.txt.