const { Button, Card, Badge, Callout, DataTable, Alert, Tabs, Modal, TableOfContents } = window.ZaviFxDesignSystem_f15c31; const EVIDENCE = [ { src: 'case-studies/seo-story-1.jpg', cap: 'One month of SEO work: keywords, referring domains, Domain Authority and organic traffic movement (client report, supplied by ZaviFx).' }, { src: 'case-studies/seo-story-2.jpg', cap: 'Traffic and ranking growth after a structural, content and backlink audit.' }, { src: 'case-studies/seo-story-3.jpg', cap: 'Data-led programme: metrics monitoring, top pages and keyword ranking distribution.' }, { src: 'case-studies/seo-story-4.jpg', cap: 'Authority and organic keyword reporting from Moz and Ahrefs.' }, ]; const DASHBOARDS = [ { src: 'case-studies/ahrefs-overview-1.webp', cap: 'Ahrefs Site Explorer overview — backlink profile, referring domains and organic performance.' }, { src: 'case-studies/ahrefs-overview-2.webp', cap: 'Ahrefs overview for a second project — organic keywords by position and referring-domain split.' }, { src: 'case-studies/semrush-domain-1.webp', cap: 'Semrush domain overview — organic traffic, keyword intent split and backlink types.' }, { src: 'case-studies/semrush-domain-2.webp', cap: 'Semrush domain overview — position distribution, competitors and indexed pages.' }, ]; function CaseStudyPage({ go }) { const [zoom, setZoom] = React.useState(null); const toc = [ { id: 'overview', label: 'Overview' }, { id: 'baseline', label: 'Baseline' }, { id: 'strategy', label: 'Strategy' }, { id: 'links', label: 'Link building' }, { id: 'timeline', label: 'Timeline' }, { id: 'evidence', label: 'Evidence' }, { id: 'lessons', label: 'Lessons' }, ]; return ( <>

Client overview

REPLACE: client name and industry, or keep this anonymised. The engagements shown here are e-commerce and content websites where organic search was the primary growth channel and paid spend was limited.

Technical SEOOn-pageContentLink buildingReporting

The initial challenge and baseline

Rankings had plateaued: crawlable but thin category pages, no internal linking strategy, and a backlink profile made up largely of low-relevance domains. Baseline metrics were recorded from Ahrefs, Semrush and Moz before any work started — those exports are the "before" side of every comparison below.

REPLACE: paste the baseline figures you want published (from the supplied exports). REPLACE: paste the corresponding later figures from the same tool and date range.

Strategy and technical work

  1. Website and keyword analysis — crawl, log review, keyword-to-URL mapping and cannibalisation clean-up.
  2. Technical SEO — indexation rules, sitemaps, structured data, Core Web Vitals, internal linking depth.
  3. On-page optimisation — titles, headings, entity coverage and template-level metadata.
  4. Content improvements — rewriting money pages against search intent, then building supporting articles.

Implementation timeline

{[['Weeks 1–2', 'Audit, baseline exports, keyword map, prioritised backlog.'], ['Weeks 3–6', 'Technical fixes shipped; money pages rewritten; tracking corrected.'], ['Weeks 7–12', 'Content cadence live; digital PR and outreach begins; first ranking movement reviewed.'], ['Quarter 2 onward', 'Scale what worked, prune what did not, re-forecast with the client.']].map(([k, v]) => (
{k} {v}
))}

Evidence panels

Client-facing reports first, then raw tool exports. Select any panel to open it full size and read the figures directly.

{EVIDENCE.concat(DASHBOARDS).map((e) => (
{e.cap}
))}

Key lessons

  • Fix indexation and internal linking before commissioning content — otherwise good content stays invisible.
  • Authority growth and content depth have to move together; either one alone stalls.
  • Report on qualified enquiries, not just sessions, or the programme gets judged on the wrong number.
SEO outcomes vary with competition, industry, website condition, budget and how quickly recommendations are implemented. Past performance for one client is not a prediction for another, and no agency can guarantee rankings.
setZoom(null)} title="Report evidence" description={zoom ? zoom.cap : ''} className="zx-lightbox" actions={}> {zoom && {zoom.cap}} ); } Object.assign(window, { CaseStudyPage });