Skip to main content
Jabal Al Noor Pharmacy Digital Commerce Platform
Case StudySEO

Local SEO for near-identically-named branches

Six locations on two URLs, hardcoded ratings, contradictory opening hours, and a QR redirect that survives a reprint.

Client
Jabal Al Noor Pharmacy
Industry
Pharmacy retail
Outcome
Review programme live at 6 locations

What we started with

  • Six locations sharing two URLs
  • Ratings hardcoded as decaying literals (rating: 5.0, reviewCount: 1)
  • Structured data claiming all-week 08:00 to 23:00, while the contact page said closed Fridays
  • No map anywhere
  • Two branches with names similar enough that a plain Maps search cannot reliably disambiguate them

Live ratings, carefully

A shared, React-free Google Places package, consumed by both the storefront and the optical micro-site.

Ratings come from the Places API with a deliberately narrow X-Goog-FieldMask of rating,userRatingCount, because Place Details is billed by field tier — widening the mask changes the bill.

The function returns null and never throws when the key is unset, the request fails, or either number is missing. Two reasons: a Google outage must not take a store page down, and a stale rating shown as current is worse than no rating at all on a pharmacy page.

Ratings are never persisted, because Google terms cap caching at 30 days. Freshness comes from ISR revalidation instead. Maps use the free Maps Embed API rather than the JS SDK, lazy-loaded below the fold.

The review QR redirect

In-store stickers print /r/:slug, and that route matches on a dedicated reviewSlug field — never the page slug — so renaming a page cannot invalidate a print run.

The destination resolves server-side in four tiers, none of which needs an API key:

  1. Place ID, as a Maps URL with query_place_id
  2. A captured maps?cid= profile share link
  3. A name-and-address Maps search
  4. The location own page on our site

The reasoning: a Place ID is not permanent. Google reassigns them on merge, rename or re-verification. Keeping the destination server-side makes that a one-line data edit rather than reprinting every sticker.

Tiers 1 to 3 all stay on a google.com/maps host, which is a registered iOS universal link and Android app link, so the operating system opens the Maps app natively — no user-agent sniffing, no interstitial.

A finding worth recording

The operational runbook notes that a Google Business Profile claim is not a prerequisite. Place IDs come from public listing data, and reviews accrue to the listing rather than the claim, so QR-collected reviews are inherited in full when a profile is claimed later. Only replying is blocked.

That let the review programme launch across all six locations while three profiles were still unclaimed.

Local SEO for near-identically-named branches | Tuninbits