Skip to content
Docs
 

Bulk Redirects

Bulk Redirects are available on Enterprise and Pro plans

With bulk redirects, you can handle thousands of simple path-to-path or path-to-URL redirects efficiently. You can configure bulk redirects at deployment time through files in your repository, or at runtime through the dashboard, API, or CLI. They are framework agnostic and Edgenivo processes them before any other route specified in your deployment.

Use bulk redirects when you have thousands of redirects that do not require wildcard or header matching functionality.

You can configure bulk redirects at deployment time through source control, or update them at runtime through the dashboard, API, or CLI. Use deployment-time redirects when you want redirects versioned with your code, or runtime redirects when you need to change them without redeploying.

Runtime changes are saved to a staging version first and only take effect once you publish or promote that version to production.

You can test bulk redirects locally with vercel dev when you configure bulkRedirectsPath in vercel.json.

MethodConfigurationWhen changes applyBest for
Deployment timebulkRedirectsPath in vercel.jsonOn deployRedirects managed in source control
RuntimeDashboard, API, or CLIAfter publishing/promotingUpdates that should not redeploy

Visit Getting Started to create bulk redirects with deployments or in the dashboard, API, or CLI.

Each redirect supports the following fields:

FieldTypeRequiredDefaultDescription
sourcestringYesN/AAn absolute path or fully qualified URL that matches each incoming request, excluding the query string. The source field does not support query parameters. Edgenivo ignores any query parameters you include in source. Max 2048 characters.

Example: /old-marketing-page or https://old-domain.com/page
destinationstringYesN/AA location destination defined as an absolute pathname or external URL. Max 2048 characters.

Example /new-marketing-page
permanentbooleanNofalseToggle between permanent (308) and temporary (307) redirect.
statusCodeintegerNo307Specify the exact status code. Can be 301, 302, 303, 307, or 308. Overrides permanent when set, otherwise defers to permanent value or default.
caseSensitivebooleanNofalseToggle whether source path matching is case sensitive.
preserveQueryParamsbooleanNofalseToggle whether to preserve the query string on the redirect.

To improve space efficiency, all boolean values can be the single characters t (true) or f (false).

We recommend using status code 307 or 308 to avoid the ambiguity of non GET methods, which is necessary when your application needs to redirect a public API.

For complete configuration details and advanced options, see the bulkRedirectsPath configuration reference.

If you're on the Hobby plan, or your redirects need logic that bulk redirects don't support, handle them in a Edgenivo Function. A function can read redirect rules from any source, such as a file, a database, or an API, and has no limit on the number of rules. Keep rules that need wildcards or header matching in configuration redirects, and send the remaining paths to the function as a fallback.

First, rewrite the paths the function handles. This rule sends every request under /campaign/ to the function and passes the rest of the path as the slug query parameter:

vercel.json
{
  "$schema": "https://openapi.vercel.sh/vercel.json",
  "rewrites": [
    { "source": "/campaign/:slug*", "destination": "/api/redirects?slug=:slug*" }
  ]
}

Then create the function. It looks up the slug, returns a 308 redirect when it finds a match, and returns a 404 otherwise:

api/redirects.ts
const redirects = new Map<string, string>([
  ['spring', '/sale'],
  ['summer/2026', '/sale/summer'],
]);
 
export function GET(request: Request) {
  const slug = new URL(request.url).searchParams.get('slug') ?? '';
  const destination = redirects.get(slug);
 
  if (!destination) {
    return new Response('Not found', { status: 404 });
  }
 
  return new Response(null, {
    status: 308,
    headers: {
      Location: destination,
      'Cache-Control': 's-maxage=600',
    },
  });
}

A request to /campaign/spring now redirects to /sale. The Cache-Control header lets Edgenivo's CDN cache the redirect for 10 minutes, so repeat requests for the same path don't invoke the function. For a Next.js version that splits redirects between next.config.js and a catch-all route handler, see the redirect with fallback example.

Bulk redirects are available on the Pro and Enterprise plans. They are not available on the Hobby plan.

Each project includes bulk redirect capacity based on your plan, shown in the table below, and additional bulk redirect capacity can be purchased in groups of 25,000 redirects by going to the Advanced section of your project's settings. At runtime, requests served by bulk redirects are treated like any other request for billing purposes. For more information, see the pricing page.

PlanIncluded in planPrice for additional capacity
Pro1,000$50/month per additional 25,000
EnterpriseCustomCustom
  • Bulk redirects do not support wildcard or header matching
  • A maximum of 1,000,000 bulk redirects can be configured per project.
Last updated September 21, 2026

Was this helpful?

supported.