Case study
BookMySafari: built SEO-first from the ground up
By Nipun Arora Last updated 2026-09-01
BookMySafari (bookmysafari.ae) is a Dubai desert-safari booking site. It launched into a market with several long-established operators already ranking, so the site could not lean on years of history it did not have. I built it on Astro, with the page architecture and the schema graph decided before a single wireframe existed, and the results below are dated, sourced, and checkable against the site's own build records.
The situation
A new booking site, an old and crowded search category
Desert safari bookings in Dubai are a dense commercial category: dozens of operators compete for the same handful of head terms, and several of them had been ranking for years before BookMySafari existed. A new entrant in that category faces a specific problem an AI assistant makes visible fast. Early testing of what the AI engines said about the site found them recommending against it for being new, a signal that showed up in the assistants' answers before it showed up anywhere else.
That finding set the policy the site still runs on: no founding-date disclosure anywhere in its schema or copy, as of 2026-08-08, and no claim that depends on tenure to sound credible. A site that cannot compete on years competes on structure instead, which is what the build below is about.
The search research
Research before wireframes, not after
A competitor-landscape review, an AI-citation review, a regulatory and operations review, and a full topical map came first, in that order, before any page template was drawn. The build folder still carries all four documents; the site's page list is the direct output of the fourth one, not a guess at what a booking site "usually" needs.
Three decisions came directly out of that research and shaped every page that followed: one keyword owns one page, so a shared head term never splits its ranking signal across two URLs; every heading answers the question it poses, checked against a three-test standard (describe, stand alone, earn its specificity) rather than approved on a writer's instinct; and every claim that could sound like a self-reported number, "years in business" among them, gets replaced with something a visitor or a crawler can check directly.
What was built
A schema graph and a heading discipline, applied at scale
The site runs on Astro, with a structured-data graph covering every booking-relevant page: Product and Offer nodes for each package tier, a BreadcrumbList on every route, and an Article graph on every long-form guide, each one linked by a real @id rather than duplicated field by field.
Heading quality got the same treatment as schema. On 2026-07-30, 1,708 H2 and H3 headings across the site were tested against a three-test doctrine, describe the section, stand alone out of context, and earn any number or term it names, and 163 failed and got rewritten. That exact doctrine is now written into this site's own content playbook: the same test scored every heading on the page you are reading.
Structured data does not stay static once it ships. On 2026-08-17, a Google Search Console report flagged four schema defect classes, background-event nodes typed incorrectly, three Product nodes missing a required image, one node carrying the wrong organization type, and a missing return-policy link, and each one was retyped or corrected against the site's real published policy rather than patched with an invented value. Ongoing structured-data maintenance is part of the build, not a one-time launch step.
Measured results
Three numbers, each dated
Three measurements from the build record show what an SEO-first architecture buys once a site is live: how fast it answers, how many pages it can carry without collapsing into duplicates, and whether every visitor, not just most, can use it.
- Edge time-to-first-byte: 2.33 seconds to 0.25 seconds
- An edge-caching rule installed on 2026-08-17 cut time-to-first-byte on a cache hit to 0.25 seconds, down from 2.33 seconds on a cache miss, verified directly against the live site with
curl. A slow first byte costs a crawler's patience and a visitor's before either one ever reads a word of content. - Accessibility: 1.00, every page and preset
- Following that same 2026-08-17 wave, a Lighthouse accessibility check scored 1.00, zero findings, on every page of the site and on both the desktop and mobile-emulated presets. Not a single sampled route: the full page set, checked the same way twice.
- 90 built pages, one keyword per page
- As of 2026-08-26, the site carries 90 built pages, package tiers, locations, activities, seasonal and audience guides, and a comparison hub, none of them competing with another page on this site for the same search term. A large page count is only an asset when no two pages fight each other for the same ranking.
What it proves
Structure survives longer than a launch-day report
A launch-day audit that scores well and is never revisited proves less than a schema graph that keeps passing Google's own structured-data checks a year in. BookMySafari's Search Console remediation on 2026-08-17 is the useful data point here, not because a defect appeared, defects appear on every site, but because the fix traced each one to a real, published policy instead of an invented value that would have papered over the finding.
The heading discipline tested at 1,708 instances on this project is the same discipline behind every heading on nipunarora.me. A method that holds up at that scale, and gets carried forward into the next build rather than reinvented, is what a technical SEO audit and a schema markup engagement both draw on: structure that gets checked once, then checked again, and holds.
Building a site the same way, from the first page?
Hire me for your build