Вопрос или проблема
Должен ли я заблокировать директорию ‘_next’ на сайте, использующем Next.js, с помощью robots.txt?
Мы используем Next.js для нашего веб-сайта. Одним из основных преимуществ является то, что он загружает все связанные страницы по мере просмотра пользователем страницы. Это делается за счет выполнения различных запросов к: /_next/xxx
, где xxx
может быть разными файлами JSON или изображениями.
Мой вопрос заключается в том, следует ли мне блокировать директорию /_next
, чтобы избежать проблем с дублирующимся контентом или устаревшим контентом (так как эти файлы JSON меняются с каждым развертыванием).
Я написал целую статью на эту тему:
Robots.txt – блокировка папки _Next в приложении Next.js
Я попытался заблокировать всю директорию /_next/
в своем файле robots.txt
, чтобы протестировать эту идею.
Но у меня возникли проблемы с тем, что CSS не мог быть обработан ботом Google.
Поэтому я сделал следующее и запретил файлы, которые использовались только для пользовательского опыта (метаданные):
User-agent: *
# Обновления производительности бюджета обхода Next.JS
# Блокировка файлов, заканчивающихся на .json, _buildManifest.js, _middlewareManifest.js, _ssgManifest.js и любые другие JS файлы
# Звездочка позволяет любым именам файлов
# Знак доллара гарантирует, что он соответствует только концу URL, а не странно отформатированным URL (например, /locations.json.html)
Disallow: /*.json$
Disallow: /*_buildManifest.js$
Disallow: /*_middlewareManifest.js$
Disallow: /*_ssgManifest.js$
Disallow: /*.js$
Теперь мы экономим некоторый дополнительный бюджет обхода Google для файлов, которые мы действительно хотим, чтобы Google индексировал 🙂
PS – Если вы ищете отличное объяснение о блокировке определенных файлов в вашем robots.txt
, используйте этот источник:
https://martijnoud.com/robots-txt/#Disallow_a_certain_file
EDIT: 13.03.22 – Я решил заблокировать все JS файлы, изначально я блокировал только buildManifest, middlewareManifest и ssgManifest.. Но Google действительно хочет проверить, чтобы неактуальный JS все еще возвращал 404. Так что на данный момент просто блокирую все JS!
EDIT: 10.08.2022 – Это по-прежнему работает, как часы, после 5 месяцев с момента внесения этого изменения. Никаких проблем с обходом/индексацией от Google, и мой бюджет обхода используется гораздо более эффективно.
Здесь мы предполагаем, что это для статической сайт экспорта.
Я предпочитаю немного другой подход, так как использование /*.js$
все еще блокирует некоторые важные файлы.
//robots.txt
User-Agent: *
Allow: /
Allow: /_next/static/media
Allow: /_next/static/css
Allow: /_next/static/chunks
Disallow: /_next/
Disallow: /404.html
Sitemap: https://<ваше-имя-сайта>/sitemap.xml
Версия Nextjs: "next": "14.2.7"
Ответ или решение
Конечно, давайте рассмотрим вопрос о том, следует ли блокировать директорию /_next
в вашем сайте, использующем Next.js, с помощью файла robots.txt
.
Понимание директории /_next
Директория /_next
в приложении Next.js используется для хранения статических файлов, таких как JavaScript, CSS, JSON-файлы, и других ресурсов, необходимых для работы приложения. Эти файлы динамически загружаются в процессе рендеринга страниц, и их правильная работа критически важна для функций, таких как клиентский роутинг и производительность.
Зачем блокировать /_next
?
Основная причина блокировки /_next
— это предотвращение потенциальных проблем с дублированием контента и уменьшение нагрузки на сервер, так как поисковые системы могут неоднократно индексировать динамически загружаемые ресурсы. Эти файлы могут изменяться при каждой сборке, что также может вызвать проблемы со «старым контентом» (stale content).
Однако блокировка всей директории /_next
может привести к проблемам с рендерингом CSS и других необходимых ресурсов для отображения страниц. Как упоминалось, если Googlebot не может получить доступ к необходимым ресурсам, это может негативно сказаться на индексации вашего сайта.
Рекомендуемый подход
- Избирательная блокировка: Вместо полной блокировки директории
/_next
, рекомендуется использовать более избирательный подход. Например, можно блокировать только конкретные файлы, которые не влияют на рендеринг страниц.
Пример конфигурации robots.txt
:
User-agent: *
Allow: /_next/static/media
Allow: /_next/static/css
Allow: /_next/static/chunks
Disallow: /_next/*
Disallow: /404.html
Sitemap: https://<ваш-сайт>/sitemap.xml
Это позволит поисковым системам индексировать актуальные CSS и медиафайлы, которые необходимы для визуализации страниц, одновременно предотвращая индексацию других несущественных файлов JSON и JavaScript, которые могут создавать вопросы с дублированием контента.
- Регулярный мониторинг: После внедрения изменений важно отслеживать поведение вашего сайта в поисковых системах, чтобы убедиться, что индексация происходит корректно и вы не сталкиваетесь с проблемами.
Заключение
Резюмируя, блокирование директории /_next
может быть важным шагом в управлении SEO вашего сайта, но следует подходить к этому с осторожностью. Использование более детального подхода, позволяющего индексацию необходимого контента, поможет сохранить производительность и качество вашего веб-приложения, избегая проблем с индексацией и дублированием контента. Не забывайте периодически анализировать результаты ваших решений и вносить корректировки при необходимости.