Index of every page on this site: llms.txt

Nuxt Skew Protection needs persistent storage to preserve previous build assets across deployments.

The default storage path is node_modules/.cache/nuxt-seo/skew-protection. If your CI pipeline clears this directory, restore it before each build.

Retention Periods

Set retention limits with retentionDays and maxNumberOfVersions. The defaults keep up to 10 versions for 30 days.

nuxt.config.ts
export default defineNuxtConfig({
  skewProtection: {
    // Keep versions for 45 days
    retentionDays: 45,
    // Keep maximum 15 versions
    maxNumberOfVersions: 15
  }
})

Cleanup happens during build, removing:

  • Versions older than retentionDays
  • Oldest versions beyond maxNumberOfVersions

GitHub Actions

The default filesystem storage works with GitHub Actions caching to persist build assets between deployments using the actions/cache GitHub Action.

The cache key must be unique per deployment, otherwise actions/cache won't save new assets (it only saves on cache miss).
your-github-workflow.yml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # Install...
      - name: Cache for Nuxt SEO
        uses: actions/cache@v4
        with:
          path: node_modules/.cache/nuxt-seo
          key: nuxt-skew-${{ github.sha }}
          restore-keys: |
            nuxt-skew-
      # Build, etc..

The restore-keys fallback restores previous assets. A unique github.sha key lets the cache save new assets after each build.

Cloudflare

If you have your deployments running through Cloudflare then the node_modules folder should automatically persist between deployments, so you do not need any additional configuration.

If you're deploying to Cloudflare using your own CI pipeline, you can use Cloudflare KV storage to persist build assets instead. See the dedicated Cloudflare Deployment guide which covers storage configuration in detail.

Redis

nuxt.config.ts
export default defineNuxtConfig({
  skewProtection: {
    storage: {
      driver: 'redis',
      host: process.env.REDIS_HOST || 'localhost',
      port: Number(process.env.REDIS_PORT) || 6379,
      password: process.env.REDIS_PASSWORD,
      db: 0,
      base: 'skew-protection'
    }
  }
})

Upstash Redis

For serverless deployments like Netlify or Vercel, Upstash provides a Redis-compatible database with an HTTP API.

Install the Upstash Redis client:

Terminal
npx nypm add @upstash/redis
nuxt.config.ts
export default defineNuxtConfig({
  skewProtection: {
    storage: {
      driver: 'upstash',
      url: process.env.UPSTASH_REDIS_REST_URL,
      token: process.env.UPSTASH_REDIS_REST_TOKEN,
      base: 'skew-protection'
    }
  }
})

You can find your REST URL and token in the Upstash Console after creating a database.

CDN Usage

If your CDN already keeps /_nuxt/** assets available across deployments, you can disable asset bundling with bundleAssets.

nuxt.config.ts
export default defineNuxtConfig({
  skewProtection: {
    // Disable persistent storage
    bundleAssets: false
  }
})
Was this page helpful?