payloadcms

redirects

Official
by payloadcms
payload
Redirects & URLs
v3
workspace:*
MIT

Overview

Summary generated from the README

Adds a redirects collection to Payload so editors can manage URL redirects in the admin panel. Each redirect points to either a document from configured collections or a custom URL, with optional redirect types such as 301 and 302. The collection is queried from the frontend, for example in Next.js middleware, to apply the redirects.

Features

  • Redirects collection managed in the admin panel
  • Internal reference redirects to documents in chosen collections
  • External redirects to custom URLs
  • Optional redirect types such as 301 and 302
  • Built-in English, French and Spanish translations with overrides
  • Overrides option to customize the redirects collection and its fields

Use cases

  • Redirect old URLs to new pages after a site restructure
  • Let editors maintain redirects without code changes
  • Apply redirects in Next.js middleware by querying the redirects collection

From the author

Redirects plugin for Payload

Installation

npm i @payloadcms/plugin-redirects

45.4k

Stars

4.3k

Forks

1380

Open Issues

Today

Last Updated

105.3k

Weekly Downloads

v3.91.0

npm Version

36.8 KB

Unpacked Size

2

Dependencies

Repository stars

Trends appear after 7 days of data. Daily snapshots have not started yet.

Shared by 12 plugins in payloadcms/payload.

npm weekly downloads

Trends appear after 7 days of data. Daily snapshots have not started yet.

Each point is npm's rolling 7-day download count.

Health Score

100/100Excellent

Composite score based on GitHub activity, stars, npm downloads, publish recency, dependency count, and package size.

Badge for your README

Payload Directory health badge
Markdown
[![Payload Directory](https://payloaddirectory.dev/badge/official-plugin-redirects.svg)](https://payloaddirectory.dev/plugins/official-plugin-redirects)
HTML
<a href="https://payloaddirectory.dev/plugins/official-plugin-redirects"><img src="https://payloaddirectory.dev/badge/official-plugin-redirects.svg" alt="Payload Directory"></a>
Updated Oct 21, 2026Created Jan 5, 2021Published Oct 15, 2026

README

Payload Redirects Plugin

A plugin for Payload to easily manage your redirects from within your admin panel.

Features

  • Manage redirects directly from your admin panel
  • Support for internal (reference) and external (custom URL) redirects
  • Built-in multi-language support
  • Optional redirect types (301, 302, etc.)

Installation

pnpm add @payloadcms/plugin-redirects

Basic Usage

In your Payload Config, add the plugin:

import { buildConfig } from 'payload'
import { redirectsPlugin } from '@payloadcms/plugin-redirects'

export default buildConfig({
  plugins: [
    redirectsPlugin({
      collections: ['pages'], // Collections to use in the 'to' relationship field
    }),
  ],
})

Configuration

Options

OptionTypeDescription
collectionsstring[]An array of collection slugs to populate in the to field of each redirect.
overridesobjectA partial collection config that allows you to override anything on the redirects collection.
redirectTypesstring[]Provide an array of redirects if you want to provide options for the type of redirects to be supported.
redirectTypeFieldOverrideFieldA partial Field config that allows you to override the Redirect Type field if enabled above.

Advanced Example

import { buildConfig } from 'payload'
import { redirectsPlugin } from '@payloadcms/plugin-redirects'

export default buildConfig({
  plugins: [
    redirectsPlugin({
      collections: ['pages', 'posts'],

      // Add custom redirect types
      redirectTypes: ['301', '302'],

      // Override the redirects collection
      overrides: {
        slug: 'custom-redirects',

        // Add custom fields
        fields: ({ defaultFields }) => {
          return [
            ...defaultFields,
            {
              name: 'notes',
              type: 'textarea',
              admin: {
                description: 'Internal notes about this redirect',
              },
            },
          ]
        },
      },
    }),
  ],
})

Custom Translations

The plugin automatically includes translations for English, French, and Spanish. If you want to customize existing translations or add new languages, you can override them in your config:

import { buildConfig } from 'payload'
import { redirectsPlugin } from '@payloadcms/plugin-redirects'

export default buildConfig({
  i18n: {
    translations: {
      // Add your custom language
      de: {
        'plugin-redirects': {
          fromUrl: 'Von URL',
          toUrlType: 'Ziel-URL-Typ',
          internalLink: 'Interner Link',
          customUrl: 'Benutzerdefinierte URL',
          documentToRedirect: 'Dokument zum Weiterleiten',
          redirectType: 'Weiterleitungstyp',
        },
      },
      // Or override existing translations
      fr: {
        'plugin-redirects': {
          fromUrl: 'URL source', // Custom override
        },
      },
    },
  },

  plugins: [
    redirectsPlugin({
      collections: ['pages'],
    }),
  ],
})

Using Redirects in Your Frontend

The plugin creates a redirects collection in your database. You can query this collection from your frontend and implement the redirects using your framework's routing system.

Example: Next.js Middleware

// middleware.ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export async function middleware(request: NextRequest) {
  const { pathname } = request.nextUrl

  // Fetch redirects from Payload API
  const redirects = await fetch('http://localhost:3000/api/redirects', {
    next: { revalidate: 60 }, // Cache for 60 seconds
  }).then((res) => res.json())

  // Find matching redirect
  const redirect = redirects.docs?.find((r: any) => r.from === pathname)

  if (redirect) {
    const destination =
      redirect.to.type === 'reference'
        ? redirect.to.reference.slug // Adjust based on your collection structure
        : redirect.to.url

    return NextResponse.redirect(
      new URL(destination, request.url),
      redirect.type === '301' ? 301 : 302,
    )
  }

  return NextResponse.next()
}

Similar plugins

View on GitHubView on npmOfficial Payload plugin