acme.com/blog to Notra with rewrites in vercel.json at the root of the project, which works for every framework on Vercel. Vercel forwards the matching requests to Notra at the edge and keeps the URL in the browser, and for Next.js you can also use next.config.ts. Read the steps on every platform first, and replace acme.notra.site with the Notra address on your site’s Domains page.
1
Add the rewrites
vercel.json already has rewrites, add these entries to the list, and since Vercel uses the first rule that matches, put them before any catch-all rewrite.2
Remove your own /blog routes
If your website already has pages under
/blog, delete or move them, because files in your deployment win over rewrites, so an existing /blog page would hide your Notra site.3
Deploy and check
Deploy, open
https://www.acme.com/blog/_notra/probe.txt to confirm the rewrite works, then click Check on the domain in Notra.Limits to keep in mind
trailingSlash: trueinvercel.jsonredirects/blogto/blog/and the check fails, so leave it unset orfalse.- Attack Challenge Mode and bot-protection rules in the Vercel Firewall can block the check and AI crawlers, so allow your section paths, or at least the user agent
NotraSitesVerifier/1.0. - Headers you set for
/(.*)invercel.json, such as aContent-Security-Policy, can apply to the forwarded pages too and block the site’s own scripts, so exclude your section paths from those header rules. - Vercel keeps the
Acceptheader and passes Notra’s redirects back to the browser, so Markdown for AI agents and yourblog.jsonredirects work without extra setup.