---
title: "SEO Route Rules"
description: "Utilise route rules for dynamic SEO meta tags."
canonical_url: "https://nuxtseo.com/docs/seo-utils/guides/route-rules"
last_updated: "2026-05-23T21:11:06.844Z"
---

## Introduction

Sometimes we're dealing with complex page structures which make it difficult to set SEO meta tags appropriately without
duplication.

To get around this, you can use build-time [Route Rules](https://nitro.unjs.io/config#routerules) to set dynamic SEO meta tags. This is useful for setting up default meta tags for a specific set of pages, such as a blog or product pages.

## Usage

<callout icon="i-heroicons-exclamation-triangle" type="warning">

Route rules are injected server-side and won't update on client-side navigation. Only use for crawler-facing data.

</callout>

Trying to set default OG Images? Try instead use the [App Icons - Open Graph Images](/docs/seo-utils/guides/open-graph-images#opengraph-image).

### `seoMeta`

Takes the same input as [useSeoMeta()](https://nuxt.com/docs/api/composables/use-seo-meta#useseometa).

<u-alert color="info" icon="i-carbon-information" title="Infer SEO Meta Plugin" variant="subtle">
<template v-slot:description="">

Nuxt SEO Utils loads the [Infer SEO Meta Plugin](https://unhead.unjs.io/docs/head/guides/plugins/infer-seo-meta-tags) from [Unhead](https://unhead.unjs.io/) that will automatically infer SEO meta tags for you based on your content, including `og:title`, `og:description`, `twitter:card`.

</template>
</u-alert>

```ts
export default defineNuxtConfig({
  routeRules: {
    '/blog/**': {
      seoMeta: {
        author: 'Harlan Wilton',
      },
    },
  }
})
```

### `head`

Takes the same input as [useHead()](https://nuxt.com/docs/api/composables/use-head).

```ts
export default defineNuxtConfig({
  routeRules: {
    '/blog/**': {
      head: {
        // set default icon for blog posts
        link: [
          { rel: 'icon', type: 'image/png', href: '/blog-icon.png' }
        ]
      },
    },
  }
})
```

## Limitations

Route rule `seoMeta` uses the module's configured `tagPriority` (default `'low'`). Page-level `useSeoMeta()` calls automatically take precedence since they use the default priority.
