acme.com/blog, the host that runs acme.com forwards every request under /blog to Notra and passes the response back, so visitors and search engines only ever see acme.com. DNS can’t route paths, so this always needs a rewrite (also called a reverse proxy) on your side.
Pick your platform
Vercel
vercel.json, any frameworkNext.js
next.config.ts, any hostTanStack Start
vite.config.ts with NitroNetlify
_redirectsCloudflare
A Worker on your zone
nginx
proxy_pass, plus CaddyThe steps on every platform
1
Set the section paths
Under Settings → Content → Sections, set the paths you want on your website, for example
/blog and /changelog, which are the paths you forward. See Section paths.2
Add the domain in Notra
Open Domains → Add domain and enter the host and path, for example
www.acme.com/blog. Use the host that actually serves your website, so if acme.com redirects to www.acme.com, enter www.acme.com. The domain shows up with the status Needs rewrites.3
Add the rewrite
Forward each section path and everything below it to your Notra address with the path unchanged, following the guide for your platform.
4
Deploy your website and check
Deploy the change, then click Check on the domain. Notra fetches a test file through your website for every section, and once it answers, the domain is Active and becomes the site’s primary address.
5
Add the sitemaps to your robots.txt
Your
robots.txt stays yours, so add the section sitemaps to it:robots.txt
What the rewrite has to do
Every platform guide meets these rules, so if you write your own proxy, check it against them.
Notra doesn’t need cookies or
Authorization headers, so where your platform lets you, don’t forward them and your visitors’ sessions never leave your domain. Keep User-Agent and Referer, and send the visitor’s IP in X-Forwarded-For, so site analytics can tell visitors and countries apart. The nginx and Cloudflare guides set it explicitly.
How the check works
Check requestshttps://www.acme.com/blog/_notra/probe.txt for every section with the user agent NotraSitesVerifier/1.0, and it passes when all of these are true:
- The file comes from this site.
https://www.acme.com/bloganswers without a redirect.- The response doesn’t carry
X-Robots-Tag: noindex.
https://www.acme.com/blog.
Search engines and AI agents
- Search engines only index pages under your domain, because your Notra address stops being crawled once the domain is active and every page names
www.acme.com/blog/...as canonical. - Each section has its own
sitemap.xml,feed.xmlandllms.txtunder its path, for example/blog/llms.txt. /robots.txtand/llms.txtat the root of your domain belong to your website, so add the sitemaps torobots.txt(step 5) and link/blog/llms.txtfrom your ownllms.txtif you have one.
Troubleshooting
The check says it could not reach the test file
The check says it could not reach the test file
Open
https://www.acme.com/blog/_notra/probe.txt in your browser, where you should see a short text that starts with notra-site=. If you see your own 404 page, the rewrite isn’t live yet or doesn’t cover /blog/*. If the browser is redirected, you entered the wrong host (acme.com instead of www.acme.com) or your host adds a trailing slash.The page loads, but without styles
The page loads, but without styles
Your rewrite forwards only
/blog rather than /blog/*, while assets live under /blog/_notra/assets/.Notra answers with a 404 for every page
Notra answers with a 404 for every page
Your proxy sends your own host in the
Host header, so set it to your Notra address, for example proxy_set_header Host acme.notra.site; in nginx.Bot protection blocks the check
Bot protection blocks the check
Firewalls like Vercel’s Attack Challenge Mode or Cloudflare’s Bot Fight Mode can block
NotraSitesVerifier/1.0, so allow it for your section paths or pause the protection while you check.The blog link in the header goes to a 404
The blog link in the header goes to a 404
Forward every section that’s turned on, because the header links between the blog and the changelog, so both need a rewrite.
An old URL from my blog.json redirects shows the new page under the old URL
An old URL from my blog.json redirects shows the new page under the old URL
Your proxy follows redirects instead of passing them on. In a Cloudflare Worker, set
redirect: "manual", while the other guides already do this.