Модуль @nuxtjs/sitemap в Nuxt
Модуль @nuxtjs/sitemap автоматически генерирует файл sitemap.xml для вашего Nuxt приложения. Sitemap помогает поисковым системам, таким как Google, Bing и другие, лучше индексировать ваш сайт, сообщая им о всех доступных страницах.
Установка
Для начала установите модуль @nuxtjs/sitemap:
npm install --save-dev @nuxtjs/sitemap
# или
yarn add -D @nuxtjs/sitemapЗатем добавьте @nuxtjs/sitemap в секцию modules вашего файла nuxt.config.js:
export default {
modules: [
'@nuxtjs/sitemap'
],
sitemap: {
// Настройки модуля (см. ниже)
}
// ... другие настройки
}Настройка (nuxt.config.js)
Модуль @nuxtjs/sitemap имеет множество опций конфигурации, которые позволяют настроить генерацию файла sitemap.xml под ваши нужды. Некоторые из основных опций включают:
export default {
modules: [
'@nuxtjs/sitemap'
],
sitemap: {
hostname: '[https://yourdomain.com](https://yourdomain.com)', // Обязательно: URL вашего сайта
gzip: false, // Сжимать sitemap.xml в sitemap.xml.gz (рекомендуется)
cacheTime: 600000, // Время кэширования sitemap.xml в миллисекундах (по умолчанию: 600000 - 10 минут)
exclude: [ // Массив исключенных маршрутов (например, динамические админ-панели)
'/admin/**',
'/secret'
],
routes: async () => { // Функция для динамического генерации маршрутов
const { $axios } = useNuxtApp();
const { data: posts } = await $axios.$get('/api/posts');
return posts.map(post => ({
url: `/blog/${post.slug}`,
lastmod: post.updatedAt // необязательно
}));
},
defaults: { // Настройки по умолчанию для всех маршрутов
changefreq: 'daily',
priority: 0.8
},
// ... другие опции
}
// ... другие настройки
}Основные опции:
hostname(обязательно): Полный URL вашего сайта (например,https://yourdomain.com). Этот URL используется для формирования абсолютных ссылок в файлеsitemap.xml.gzip: Определяет, нужно ли сжимать файлsitemap.xmlвsitemap.xml.gz. Сжатие уменьшает размер файла и может ускорить его загрузку поисковыми системами. Рекомендуется установить вtrueдля production.cacheTime: Время в миллисекундах, в течение которого сгенерированный файлsitemap.xmlбудет кэшироваться. При следующем запросе (например, от поискового бота) будет отдан кэшированный файл, если время кэша не истекло.exclude: Массив строк с регулярными выражениями или точными путями, которые нужно исключить из файлаsitemap.xml.routes: Может быть массивом строк (статических маршрутов) или асинхронной функцией, которая возвращает массив объектов с информацией о маршрутах. Эта функция полезна для динамической генерации маршрутов (например, на основе данных из API или CMS).- Каждый объект в массиве
routesможет иметь следующие свойства:url(обязательно): URL маршрута (относительноhostname, например,/about).lastmod(необязательно): Дата последнего изменения страницы в формате YYYY-MM-DD или YYYY-MM-DDTHH:mm:ss+TZD.changefreq(необязательно): Вероятная частота изменения страницы (always,hourly,daily,weekly,monthly,yearly,never).priority(необязательно): Приоритет URL относительно других URL на сайте (значение от 0.0 до 1.0).alternates(необязательно): Массив объектов с альтернативными языковыми версиями страницы (например,[{ href: 'https://yourdomain.com/en/about', hreflang: 'en' }]).
- Каждый объект в массиве
defaults: Объект с настройками по умолчанию (changefreq,priority), которые будут применяться ко всем маршрутам, если они не указаны в опцииroutes.path: Путь, по которому будет сгенерирован файлsitemap.xml(по умолчанию:/sitemap.xml).trailingSlash: Определяет, нужно ли добавлять завершающий слеш к URL-адресам в файлеsitemap.xml(по умолчанию:false). Рекомендуется согласовать это с настройками вашего сайта.i18n: Объект конфигурации для интеграции с модулем@nuxtjs/i18n(для многоязычных сайтов).
Динамическая генерация маршрутов
Функция routes позволяет вам динамически генерировать маршруты на основе данных из вашего приложения. Внутри этой функции вы можете использовать $axios (если установлен модуль @nuxtjs/axios), другие API-клиенты или любые другие способы получения данных.
Пример динамической генерации маршрутов для блога:
export default {
modules: [
'@nuxtjs/sitemap'
],
sitemap: {
hostname: '[https://myblog.com](https://myblog.com)',
routes: async () => {
const { $axios } = useNuxtApp();
const { data: posts } = await $axios.$get('/api/posts');
return posts.map(post => ({
url: `/posts/${post.slug}`,
lastmod: post.updated_at,
changefreq: 'weekly',
priority: 0.7
}));
}
}
// ... другие настройки
}Интеграция с @nuxtjs/i18n (для многоязычных сайтов)
Если вы используете модуль @nuxtjs/i18n для поддержки нескольких языков, @nuxtjs/sitemap может автоматически генерировать альтернативные языковые версии страниц в вашем sitemap.xml.
Пример конфигурации с @nuxtjs/i18n:
export default {
modules: [
'@nuxtjs/i18n',
'@nuxtjs/sitemap'
],
i18n: {
locales: ['en', 'fr'],
defaultLocale: 'en',
// ... другие настройки i18n
},
sitemap: {
hostname: '[https://mywebsite.com](https://mywebsite.com)',
i18n: true, // Включить интеграцию с i18n
routes: [
'/about',
'/contact'
],
routes: async () => {
const { $i18n } = useNuxtApp();
const posts = await fetchPostsFromApi(); // Ваша функция для получения постов
return posts.map(post => ({
url: `/blog/${post.slug}`,
lastmod: post.updated_at,
alternates: $i18n.locales.map(locale => ({
href: `/${locale}/blog/${post.slug}`,
hreflang: locale
}))
}));
}
}
// ... другие настройки
}При i18n: true, модуль @nuxtjs/sitemap автоматически добавит альтернативные языковые версии для ваших маршрутов на основе конфигурации @nuxtjs/i18n. Вы также можете вручную определить alternates в функции routes для более сложной логики.
Доступ к сгенерированному файлу
После сборки вашего Nuxt приложения (с помощью npm run build или yarn build), файл sitemap.xml (или sitemap.xml.gz, если включено сжатие) будет находиться в корневом каталоге dist/ вашего проекта.
Отправка Sitemap в поисковые системы
После развертывания вашего сайта вам необходимо сообщить поисковым системам о местонахождении файла sitemap.xml. Это обычно делается через инструменты для веб-мастеров (например, Google Search Console, Bing Webmaster Tools).
Заключение
Модуль @nuxtjs/sitemap значительно упрощает процесс создания и управления файлом sitemap.xml в вашем Nuxt приложении. Благодаря гибким настройкам и возможности динамической генерации маршрутов, вы можете легко обеспечить правильную индексацию вашего сайта поисковыми системами, что является важным фактором для SEO.