What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
Going Live
Everything to check before, during and after launching an Agility-powered site: keys, publish webhooks, preview, editors and access, redirects and 404s, peer, Lighthouse, load and cache testing, SEO, and the first two weeks live.
Every site is different, but the same handful of things decide whether a launch goes smoothly: content updates reach the live site, editors can preview, old links still work, and search engines see the right pages. This checklist covers them in the order you'll meet them, from the weeks before launch to the first two weeks after.
Work through it on a staging copy of your site first. Most of these checks take minutes, and every one is much cheaper to fix before launch day than after.
Planning a launch? Our concierge team can walk through this checklist with you, review your preview and webhook setup, and be on hand for launch day. See Talk to our concierge team at the end of this page.
You need to check everything on a copy of the site that behaves the way production will.
robots.txt that disallows everything or a noindex header. Write down how you did it, because you'll need to undo it on launch day.https:// URL, so editors can preview and use Web Studio against it.AGILITY_SECURITY_KEY in the Next.js starter, or AppSettings:SecurityKey in the .NET starter) to the value from your instance.See API Key Management for where to find and rotate keys.
When an editor publishes, Agility sends a webhook to your site. Your site checks it, clears the pages that changed, and the next request fetches the new content.
Published means refresh the item. Deleted means remove it: there is no Unpublished state, and unpublishing arrives as Deleted. If your handler only checks for Published, it will never remove anything.2xx quickly. Anything else, including a redirect or a timeout, counts as a failure. Turn on retries for the webhook so a brief outage doesn't lose an update.The full payload and header reference is in Webhook Events and Payload Reference.
Once you're live, preview is how your content team sees changes before they publish. Confirm it works on the deployment editors will use.
Cache-Control: private, no-store for preview requests.X-Frame-Options header and send Content-Security-Policy: frame-ancestors 'self' https://app.agilitycms.com; on every page. See Set Up Web Studio with Any Framework and Troubleshooting Web Studio.take on every list request. Fetch API lists return 10 items by default and at most 250 per request, so page with skip when a list can be longer. A missing take is the most common reason a launched site is missing items.429 Too Many Requests above that. Retry 429 with back-off, and wait at least 30 seconds before retrying a 408.See Fetch API Status Codes and Caching and Handle Rate Limits and Outages Gracefully.
301, and avoid chains (one hop, not two). Editors can manage redirects in Agility: see URL Redirections and Testing URL Redirections.200 with a "page not found" message. Search engines index soft 404s. Some streaming frameworks send the 200 before the page knows it's missing, so check the status itself:curl -s -o /dev/null -w "%{http_code}\n" https://staging.example.com/this-page-does-not-exist
500) as well as for 404, with a way back to the home page.robots.txt is correct for production, and the temporary block from step 1 is ready to come off.sitemap.xml lists every published page you want found, using canonical URLs, and nothing that shouldn't be public. See Faster indexing with XML sitemaps and IndexNow.llms.txt. See Making Your Agility-Powered Site Readable by AI.?format=auto&w= sized to how they display, and no wider than the original. Never add parameters to an SVG. See Image Transformation Reference.The site is only half of a launch. The other half is the team and the instance behind it.
hreflang tags, give each locale its sitemap, and add redirects for each locale's old URLs. See the Multi-Locale Guide and Initialize a Page in Another Locale.agility pull just before launch: models, content, pages, assets, sitemaps and URL redirections, as they stood on the day. See CLI Reference: agility pull.Checking settings tells you the site is configured. Testing tells you it works for real people, at real traffic, with real publishing. Do these on the staging deployment, with production settings, and leave time to fix what they find.
The person who built a page is the worst person to test it. Fresh eyes find what you've stopped seeing.
TODO links and sample images.After launch, real-visitor data replaces lab scores: see The first two weeks.
Load testing answers two questions: does your site stay fast under a traffic spike, and does your caching keep it from calling the Content Fetch API on every request?
429 Too Many Requests from the Fetch API means too many requests are getting past your cache, because only uncached requests count toward the limit of 10 per second.There are usually two independent caches between your visitors and your content. Agility clears its own CDN the moment content is published. Your site's CDN is yours to clear, and it's the one that goes wrong.
1. Pages are cached. Request the same page twice. The second response should come from the cache:
URL=https://staging.example.com/some-page
curl -sI "$URL" | grep -i -E 'cache|age'
curl -sI "$URL" | grep -i -E 'cache|age'
# Tracking parameters should hit the same cache entry, not create a new one
curl -sI "$URL?utm_source=test" | grep -i -E 'cache|age'
What to look for depends on your host:
| Host or CDN | Header | A cache hit looks like |
|---|---|---|
| Vercel | x-vercel-cache | HIT or STALE |
| Netlify | cache-status | contains hit |
| Cloudflare | cf-cache-status | HIT |
| Most CDNs | age | a number that grows between requests |
?utm_source= or ?gclid= added hits the same cache entry. If it doesn't, configure your CDN to ignore tracking parameters, or every campaign click goes back to your server.2. Publishing clears it.
*.vercel.app) but not on your domain, the CDN in front of your site isn't being cleared. Clear it from your webhook handler, or shorten its cache lifetime.Deleted, and a handler that only listens for Published never clears anything.3. Preview is never cached.
Cache-Control: private, no-store.See Content Delivery & CDN Architecture for how the two layers fit together, and Caching Strategies for choosing cache lifetimes.
The Migration Cutover Runbook covers the full procedure, from the content freeze to rollback. If you're moving from another system, follow it alongside this list.
www, one of them is the canonical host and the other redirects to it, and http:// redirects to https://.robots.txt allows crawling.You don't have to work through this alone. Our concierge team can help at any stage: reviewing a checklist, checking a preview or webhook setup, or being on hand while DNS switches over.
It helps to include your instance GUID, the URL of your staging site, and your planned launch date.
Have an idea for something this checklist should cover? Let us know.