Case Study: Making calliarc.com Ready for AI Search
Key takeaway
We audited all 274 pages of calliarc.com and fixed what the audit found. Automated colour-contrast failures fell from 3,758 to 28 (all decorative numerals), empty and out-of-order headings fell to zero, the home page's HTML now links to all 43 service pages and the services hub instead of 12 service URLs, and Lighthouse accessibility and best-practices scores reached 100 on the pages we tested.
We advise clients on search and AI visibility, so we hold our own site to the same standard. calliarc.com is a statically generated Next.js site of 274 pages served from AWS S3 and CloudFront. In November 2026 we ran a full technical audit of it — every page, not a sample — and fixed what we found. This case study reports the measurements before and after each change, including what did not move.
How we measured
- A script that parsed every built page for titles, descriptions, headings, canonical URLs, social metadata, structured data, images, and internal links.
- axe-core accessibility checks run on all 272 indexable pages in a real browser.
- Live HTTP checks of every sitemap URL and every legacy redirect from the previous WordPress site.
- Lighthouse lab runs (simulated mobile) on the home page and a representative service page, before and after.
- Google Search Console for indexing and external-link data.
What was already in good shape
Every page had one H1, a unique title and description, and a self-referencing canonical URL. All 271 sitemap URLs returned 200, there were no broken internal links, and all 43 legacy redirects we could test reached a live page in one hop. The site already served AI-specific discovery files: llms.txt, a Markdown version of every page for AI clients, an agent card, and a services catalog feed.
What the audit found
- 111 empty headings across 27 service pages, caused by a template field the pages didn't supply.
- Three service pages rendering their overview and use-case sections blank after a template change.
- 3,758 colour-contrast failures, mostly brand orange (#FF9600) used as text on white at 2.18:1.
- Navigation menus that only existed in the page after a click, so the home page's HTML linked to only 12 service URLs.
- Three pages sharing the home page's social preview URL and title, and four pages with no social image.
- A landing page missing from the sitemap, skipped heading levels on 19 pages, and two-hop redirects for www URLs without a trailing slash.
What we changed
- Fixed the service template so headings are never empty, and restored the missing content on the three affected pages.
- Introduced a separate text colour for orange on light backgrounds (#B45309, 5.02:1) that switches back to the brand orange on dark sections, and darkened secondary grey text slightly so it passes on tinted backgrounds.
- Rendered all navigation menus in the HTML and hid them until opened, so crawlers can follow every link.
- Gave each page its own social metadata, added the missing sitemap entry, and corrected heading levels.
- Updated the edge function so www and missing-slash URLs reach the canonical address in one redirect, and duplicate /index.html URLs redirect to the clean URL — within CloudFront's one-millisecond compute budget.
- Published three new question-led articles and expanded two existing ones, each opening with a direct answer to a question prospective clients ask, with tradeoffs and a named author.
Results
- Colour-contrast failures (axe-core, 272 pages): 3,758 → 28. The remaining 28 are decorative step numerals hidden from assistive technology.
- Empty headings: 111 → 0. Heading-order violations: 18 → 0.
- Distinct service URLs linked from the home page's HTML: 12 → 44 (all 43 service pages plus the services hub).
- Lighthouse, home page: accessibility 97 → 100, best practices 96 → 100, performance 99 → 99.
- Lighthouse, Custom Software Development page: performance 95 → 100, accessibility 96 → 100, best practices 96 → 100; largest contentful paint 2.8 s → 1.6 s.
- Pages with incorrect or missing social metadata: 7 → 0. Sitemap: 271 → 272 URLs, all returning 200.
What did not change, and what we are still measuring
The Lighthouse SEO score stayed at 92 on both pages. That is deliberate: our robots.txt carries a Content-Signal line declaring how AI systems may use our content, and Lighthouse reports any directive it doesn't recognise as an error. Lighthouse figures are single lab runs and vary by a few points between runs.
Rankings, AI-answer citations, and organic traffic take weeks to respond to changes like these. We will update this case study with Search Console results after 90 days.
Lessons we now apply on client sites
- Audit every page, not a sample — the empty headings and blank sections only appeared on specific templates.
- Separate brand colours from text colours: a brand accent that works for buttons often fails as text.
- Hide interactive menus with CSS instead of removing them from the page, so their links stay crawlable.
- Measure before and after with the same tools, and publish what didn't improve as well as what did.