Установка
Модуль
npx nuxi module add @ranklint/nuxt
Работает без конфигурации: /sitemap.xml (статические роуты из app/pages/) и /robots.txt (не-prod окружения закрыты от индексации) доступны сразу. Требует Nuxt 4 — при compatibilityVersion < 4 бросает понятную ошибку.
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@ranklint/nuxt'],
ranklint: {
site: { url: 'https://example.com', name: 'Example' },
sitemap: {
sources: [
'/api/seo/urls',
async () => (await $fetch<string[]>('/api/products')).map(slug => ({ loc: `/p/${slug}` })),
],
cacheTtl: 3600,
},
robots: { mode: 'owner' },
jsonLd: true,
},
})
Каждый блок отключается через false — выключенный код вообще не регистрируется.
sitemap: { autoRoutes: false } убирает автоматические роуты, собранные из app/pages — используйте его вместе с явными sources, когда роутам нужны локальные префиксы или ручная курация (i18n / multi-app).
Функция-источник сериализуется в серверный бандл через toString(), поэтому обязана быть самодостаточной: Nitro-глобалы ($fetch) доступны, а замыкания на переменные и импорты из nuxt.config — нет.
<script setup>
useJsonLd('Product', {
name: 'Widget',
offers: { price: 9.99, priceCurrency: 'USD' },
})
useRanklintIgnore(['headings:single-h1'])
</script>
В dev JSON-LD валидируется по схемам Schema.org (Product, Article, BreadcrumbList, Organization, WebSite) с warn'ами в консоль; в prod валидатор полностью вытряхивается из бандла тришейкингом. Клиентский рантайм модуля — меньше 1 KB gzip.
CLI
npm i -D @ranklint/cli
npx playwright install chromium
ranklint init # сгенерировать ranklint.config.ts
ranklint audit --url https://uat.example.com # аудит живого сайта
ranklint audit --start .output/server/index.mjs # или self-contained из сборки
Exit code 1 при error-issues. Репортеры: markdown (по умолчанию), json, junit (--reporter, --output).
Первый шаг после установки это ranklint init: он пишет ranklint.config.ts, печатает сниппет для CI и определяет Nuxt.
Правила настраиваются в ranklint.config.ts с семантикой ESLint — см. Конфигурацию.