Skip to content
'; user_status_content.firstChild.appendChild(avatarContainer); } else { // Placeholder for LoggedOutUserMenu let loggedOutContainer = document.createElement('div'); // if LoggedOutUserMenu fallback let userBtn = document.createElement('button'); userBtn.style.width = "33px"; userBtn.style.height = "33px"; userBtn.style.display = "flex"; userBtn.style.alignItems = "center"; userBtn.style.justifyContent = "center"; userBtn.style.color = "var(--ds-gray-900)"; userBtn.style.border = "1px solid var(--ds-gray-300)"; userBtn.style.borderRadius = "100%"; userBtn.style.cursor = "pointer"; userBtn.style.background = "transparent"; userBtn.style.padding = "0"; // user icon ( from geist) let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.setAttribute('data-testid', 'geist-icon'); svg.setAttribute('height', '16'); svg.setAttribute('stroke-linejoin', 'round'); svg.setAttribute('style', 'color:currentColor'); svg.setAttribute('viewBox', '0 0 16 16'); svg.setAttribute('width', '16'); let path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); path.setAttribute('fill-rule', 'evenodd'); path.setAttribute('clip-rule', 'evenodd'); path.setAttribute('d', 'M7.75 0C5.95507 0 4.5 1.45507 4.5 3.25V3.75C4.5 5.54493 5.95507 7 7.75 7H8.25C10.0449 7 11.5 5.54493 11.5 3.75V3.25C11.5 1.45507 10.0449 0 8.25 0H7.75ZM6 3.25C6 2.2835 6.7835 1.5 7.75 1.5H8.25C9.2165 1.5 10 2.2835 10 3.25V3.75C10 4.7165 9.2165 5.5 8.25 5.5H7.75C6.7835 5.5 6 4.7165 6 3.75V3.25ZM2.5 14.5V13.1709C3.31958 11.5377 4.99308 10.5 6.82945 10.5H9.17055C11.0069 10.5 12.6804 11.5377 13.5 13.1709V14.5H2.5ZM6.82945 9C4.35483 9 2.10604 10.4388 1.06903 12.6857L1 12.8353V13V15.25V16H1.75H14.25H15V15.25V13V12.8353L14.931 12.6857C13.894 10.4388 11.6452 9 9.17055 9H6.82945Z'); path.setAttribute('fill', 'currentColor'); svg.appendChild(path); userBtn.appendChild(svg); loggedOutContainer.appendChild(userBtn); loggedOutContainer.style.display = 'flex'; loggedOutContainer.style.gap = '8px'; loggedOutContainer.style.alignItems = 'center'; user_status_content.firstChild.appendChild(loggedOutContainer); } })();
Menu

Getting Started

Last updated March 17, 2026

Bulk redirects can be specified either as part of a Vercel deployment or updated immediately through the UI, API, or CLI by settings redirects at the Project level without the need for a new deployment.

AI Assistance

Help me set up Bulk Redirects for this Vercel project. First, make sure the Vercel CLI is installed (`npm i -g vercel`). If I'm using Claude Code or Cursor, install the Vercel Plugin (`npx plugins add vercel/vercel-plugin`). For other agents, install Vercel Skills (`npx skills add vercel-labs/agent-skills`). Then: 1. Run `vercel link` to connect the project. 2. Use `vercel redirects` to upload redirect rules for large-scale URL migrations without redeploying.

Bulk redirects in deployments are specified in the bulkRedirectsPath field in vercel.json. bulkRedirectsPath can point to either a single file or a folder with up to 100 files. Vercel supports any combination of CSV, JSON, and JSONL files containing redirects, and they can be generated at build time.

Learn more about bulk redirects fields and file formats in the project configuration documentation.

  1. You can create fixed files of redirects, or generate them at build time as long as they end up in the location specified by bulkRedirectsPath before the build completes.

    redirects.csv
    source,destination,permanent
    /old-blog,/blog,true
    /old-about,/about,false
    /legacy-contact,https://example.com/contact,true
    redirects.json
    [
      {
        "source": "/old-blog",
        "destination": "/blog",
        "permanent": true
      },
      {
        "source": "/old-about",
        "destination": "/about",
        "permanent": false
      },
      {
        "source": "/legacy-contact",
        "destination": "https://example.com/contact",
        "permanent": true
      }
    ]
    redirects.jsonl
    {"source": "/old-blog", "destination": "/blog", "permanent": true}
    {"source": "/old-about", "destination": "/about", "permanent": false}
    {"source": "/legacy-contact", "destination": "https://example.com/contact", "permanent": true}
  2. Add the bulkRedirectsPath property to your vercel.json file, pointing to your redirect file. You can also point to a folder containing multiple redirect files if needed.

    vercel.json
    {
      "bulkRedirectsPath": "redirects.csv"
    }
  3. Deploy your project to Vercel. Your bulk redirects will be processed and applied automatically.

    vercel deploy

    Any errors processing the bulk redirects will appear in the build logs for the deployment.

Project-level redirects let you create and update bulk redirects without needing to redeploy. Redirects are staged when created and can be immediately published to production without a new deployment.

  1. From your dashboard, select your project and click the Redirects.

  2. Click Create and enter the following:

    • Source: The path to redirect from (e.g., /old-page)
    • Destination: The path or URL to redirect to (e.g., /new-page)
    • Status code: Select 307 (temporary) or 308 (permanent)

    You can also configure whether the redirect should be case sensitive (default false) or whether query parameters should be preserved (default false).

  3. New redirects are staged until you publish them. From the review redirects dialog, click on the source path for each redirect to open a staging URL where the new redirects are applied.

  4. After testing your redirects, click Publish to make your changes live.

To edit or delete a redirect:

  1. From the Redirects tab, find the redirect you want to modify.
  2. Click the three dots menu on the right side of the redirect row.
  3. Select Edit or Delete.
  4. Click Publish to apply your changes.

You can upload multiple redirects at once:

  1. From the Redirects tab, click the Create button and click CSV.
  2. Select a CSV file containing your redirects.
  3. Review the changes and click Publish.

You can manage redirects using the Vercel CLI. Make sure that you are using at least version 49.1.3 of the CLI.

terminal
# List all redirects
vercel redirects ls
 
# List all redirects versions
vercel redirects ls-versions
 
# Add a redirect
vercel redirects add /old-path /new-path --permanent
 
# Bulk upload CSV files
vercel redirects upload my-redirects.csv
 
# Remove a redirect
vercel redirects rm /old-path
 
# Promote staging redirects
vercel redirects promote 596558a5-24cd-4b94-b91a-d1f4171b7c3f

You can also manage redirects programmatically through the Vercel REST API. This is useful for automating redirect management from webhook events, such as managing redirects in a CMS and instantly updating Vercel with changes.

terminal
curl -X PUT "https://api.vercel.com/v1/bulk-redirects" \
  -H "Authorization: Bearer $VERCEL_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "teamId": "team_123",
    "projectId": "project_123",
    "redirects": [
      {
        "source": "/old-path",
        "destination": "/new-path",
        "permanent": true
      }
    ]
  }'

Was this helpful?

supported.