Test your setup
Every check below sends aGET request. Profound’s contract covers GET only, so use curl -sD - -o /dev/null rather than curl -I, which sends HEAD. A HEAD response may come from your origin or from a handler that omits the body, and tells you nothing about routing.
Assistant traffic should reach Profound
x-concierge-request-id and x-concierge-bot-kind: chatgpt-user. Together they prove your CDN routed the request to Profound and Profound recognized the assistant. They do not prove a rendered page was served: a MISS with x-concierge-failopen: 1 means Profound returned your origin’s live content.Your published test page should be served from Profound
x-concierge-cache: HIT and the rendered HTML. Save the body for comparison, and let curl decompress it in case Profound served it gzip-encoded:MISS, check the x-concierge-policy headers as described in Reading the result. Repeating the request does not turn a MISS into a HIT; only publishing a render does.Human traffic should be untouched
x-concierge-* headers and the same page content as before. Compare latency and cache hit rates with your baseline too: a Worker or a shared cache-policy change can affect them even when routing is unchanged.Search crawlers should be untouched
x-concierge-* headers. If this request is routed, see Common problems.Excluded traffic should keep its existing behavior
GET methods, requests to /api/users, /graphql, authentication, admin, framework resources, and assets, including extensionless endpoints. Use harmless fixture endpoints for methods that could modify data, and nonsecret test values for cookies and authorization headers. All of these must stay on your existing route. On Vercel, also test preview and alternate hosts.Test failure behavior safely
- Cloudflare: test an unreachable upstream, a response-header timeout, and one of the configured fallback statuses. Expect origin content with
x-concierge-cdn-failover: 1. Redirects,404, and429pass through, and a response that has already started streaming cannot be replaced. - CloudFront: test primary connection and response timeouts within the configured budget and the selected status criteria. Expect the fallback origin for configured failures, but not for
401. Send uncached requests, and expect cached fallback responses to persist until their TTL expires even after you restore the primary. - Vercel: there is no CDN-level failover. During a Profound outage or after a hard rejection, an assistant can receive an error. Do not expect transparent origin fallback.
Run setup verification from the dashboard
The Profound dashboard can test your routing for you. It sends a request with each of the nine supported assistantUser-Agent values to a URL on your registered host, from outside your network, and reports which ones your CDN routed to Profound.
These probes carry no credentials and no loop marker, so they look like real assistant traffic to your CDN. An assistant counts as routed only when its response carries a valid request ID and the matching bot kind. A MISS, a paused domain, a redirect, or a non-200 status can still confirm routing; page health is reported separately. Make sure the URL you test is on your public-page allowlist, or every assistant will correctly show as not routed.
Response header reference
Reading the result
Error responses
Profound only falls back to your origin after a request is authenticated and valid. Configuration errors are rejected rather than proxied. Cloudflare’s Worker masks its configured rejection statuses by serving your origin, and CloudFront masks400 and 403 but not 401. Vercel has no retry. When an origin page appears where you expected a rejection, inspect your CDN’s diagnostics.
Common problems
Googlebot or other search crawlers are being routed
Googlebot or other search crawlers are being routed
User-Agent pattern matches something outside the supported token list. Compare it with the pattern in your setup guide and the supported assistants. Search crawlers such as Googlebot must keep reaching your origin.Every assistant request shows bot-kind: unknown (CloudFront)
Every assistant request shows bot-kind: unknown (CloudFront)
User-Agent with Amazon CloudFront on origin requests unless an origin request policy forwards it. Profound then has nothing to classify. Use the narrow custom origin request policy in the CloudFront guide. Avoid AllViewer, which also forwards the viewer Host and can break the connection to Profound. Add User-Agent to the origin request policy, not the cache key.One assistant gets origin content while others get the render
One assistant gets origin content while others get the render
x-concierge-policy: off together with the rule ID. Add the assistant to the list, or clear the list so the rule inherits the domain default.Assistants get a cached human page, or humans get a rendered page
Assistants get a cached human page, or humans get a rendered page
x-concierge-route in the cache key, keep Minimum TTL at 0, and check host and query variants. On Cloudflare, verify that the Worker’s upstream call bypasses cache; User-Agent keying alone cannot separate page identities because every page uses the same upstream URL. On Vercel, inspect the project’s external-rewrite cache settings. On every provider, also check what happens to cached entries after you publish a replacement, unpublish, or pause: a CDN entry can outlive the change in Profound.Requests loop, or return 400 with a valid-looking rule
Requests loop, or return 400 with a valid-looking rule
x-concierge-request pass straight through to your origin. Profound stamps that header on its own origin fetches, and rejects any inbound request that carries it with 400, so a broken exclusion turns into one failed request rather than a loop.On Vercel, this is a missing condition on x-concierge-request with the value ^1$, the marker Profound stamps. Any other regex silently disables the exclusion, because a missing condition with a value only excludes requests whose header matches it.Query-string variants serve the wrong content
Query-string variants serve the wrong content
/product?id=a and /product?id=b collapse to /product, and the wrong variant is rendered and served.On CloudFront, include the query strings your pages vary on, or “All”, in the cache policy. An origin request policy can forward extra query strings without keying them, so verify forwarding and cache identity separately.Nothing is ever served from cache, even after many requests
Nothing is ever served from cache, even after many requests
x-concierge-policy and x-concierge-policy-source on the response. No matching rule means off, and warm serves live origin content even when a publication exists. Set the winning rule to serve.Then confirm that a candidate for this exact path and query was reviewed and published. Approval alone does not publish it, and repeated requests do not publish it either. A candidate held as pending stays pending until someone approves, rejects, or publishes it. If the page is published and policy is serve but you still see a MISS, check your CDN caches and your origin’s reachability.Requests are challenged, blocked, or return login content
Requests are challenged, blocked, or return login content
Turning it off
To stop serving renders without touching your CDN, pause the domain in the Profound dashboard. Every assistant request goes to your origin while your rules, renders, and publications are preserved, and resuming restores them. A pause takes effect in Profound immediately, but responses your CDN has already cached persist until they expire. A pause is not a substitute for CDN-level failover during an outage, because the request still has to reach Profound. To remove the integration, restore the CDN configuration you recorded before setup:- Cloudflare: remove the added Worker route or restore its previous binding without removing other Worker logic.
- CloudFront: restore the previous viewer-request association and policies. Use No association only when there was none before.
- Vercel: remove only the added route from
vercel.json, preserve other routing, and redeploy.