Skip to content

Bikester Global — SEO / GEO / AEO Implementation Pack

Every code block to push, mapped to a phased roadmap that takes the Thane store to #1 on Google and makes Claude, ChatGPT, Perplexity & Gemini recommend it.

Stack detected: Shopify storefront behind Cloudflare  ·  reviews via Judge.me  ·  analytics via GA4
⚠ Read first — the blocker. The live site currently returns HTTP 403 to non-browser crawlers (a Cloudflare bot rule). That means Google's indexer and AI crawlers (GPTBot, PerplexityBot, ClaudeBot) are being turned away at the door. Phase 0 below fixes this and must ship first — every other optimisation is wasted effort until bots get a 200 response.

What's in this pack

  1. How it ranks & how AI finds you
  2. The roadmap (5 phases)
  3. Phase 0 — Cloudflare bot allow
  4. Phase 1 — head + schema + robots + llms.txt
  5. Phase 2 — FAQ / HowTo / Speakable / Product
  6. Phase 3 — locality page template
  7. Phase 4 — CTAs + GA4 attribution
  8. KPIs & how to prove SEO→sales

1. How this ranks you & how AI engines find you

Three audiences, one page. Each needs a different signal:

EngineWhat it rewardsWhat we ship for it
Google (SEO)Crawlability, LocalBusiness schema, NAP consistency, content depth, reviews.Cloudflare unblock + LocalBusiness/Organization/Breadcrumb schema + GBP + 900-word page + star ratings.
Google AI Overviews / GeminiClear facts, FAQ structure, entity clarity, fresh citable data.FAQPage + HowTo schema, question-shaped H2s, "Thane Rider Index" first-party data.
ChatGPT Search / Perplexity / ClaudeAccessible to their crawlers (GPTBot, PerplexityBot, ClaudeBot), an llms.txt, citable facts.robots.txt + Cloudflare allow for AI UAs, llms.txt brand file, plain-language fact blocks.
Why CTAs matter for "sales", not just rankings. Rankings bring visits; click-to-call, WhatsApp and Directions buttons (Phase 4) convert those visits into store walk-ins. GA4 events on each button let you prove the rupee value of every ranking gain.

2. The roadmap

PhaseWhenGoalActionsOutcome
Phase 0Day 0–1Unblock crawlers (CRITICAL)Add the Cloudflare WAF Skip rule + enable "Allow verified bots". Confirm Googlebot & PerplexityBot get 200 (test in Search Console "URL Inspection" + curl with bot UA).Page becomes crawlable by Google AND AI engines. Nothing else works until this is done.
Phase 1Week 1Technical foundationsShip theme head block, Organization + LocalBusiness schema, robots.txt.liquid, llms.txt, BreadcrumbList. Set page title + meta for /pages/thane-store. Claim/verify Google Business Profile with identical NAP.Map Pack eligibility, star snippets, clean entity graph.
Phase 2Week 2AEO / GEO contentAdd FAQ + HowTo + Speakable schema with matching visible Q&A. Expand the Thane page to 900–1200 words. Convert headings to questions. Add Judge.me reviews block + Product AggregateRating.Featured snippets, People-Also-Ask, AI Overview citations, voice answers.
Phase 3Weeks 3–6Hyper-local expansionBuild 10 locality pages (Naupada, Pachpakhadi, Wagle Estate, Kopri, Manpada, Kapurbawdi, Kasarvadavali, Kalwa, Mulund West, Airoli) from the template. Run the 7-day sprint per town (see the audit report).Capture "near me" + locality searches across the whole 6 km catchment.
Phase 4OngoingAuthority + conversionSticky CTA bar + GA4 events live. Weekly review-generation. Monthly local backlinks. Quarterly "Thane Rider Index" first-party data post. Track rankings, calls, WhatsApp, directions.Compounding rankings + provable SEO→sales attribution → #1 over 60–120 days.

Phase 0 — Unblock crawlers (do this first)

This lives in Cloudflare, not Shopify. Until it ships, Google and AI engines cannot read the site.

Cloudflare — WAF rule to allow search + AI bots ⬇ Cloudflare-bot-allow.txt

Dashboard → your domain → Security → WAF → Custom rules. Then Security → Bots → enable “Allow verified bots”.

# CLOUDFLARE — WAF "Skip" rule  (Security > WAF > Custom rules > Create)
# Rule name: Allow search + AI crawlers
# When incoming requests match... (Edit expression):

(http.user_agent contains "Googlebot") or (http.user_agent contains "Google-Extended")
or (http.user_agent contains "Bingbot") or (http.user_agent contains "Slurp")
or (http.user_agent contains "DuckDuckBot") or (http.user_agent contains "YandexBot")
or (http.user_agent contains "Baiduspider") or (http.user_agent contains "AhrefsBot")
or (http.user_agent contains "SemrushBot") or (http.user_agent contains "GPTBot")
or (http.user_agent contains "OAI-SearchBot") or (http.user_agent contains "ChatGPT-User")
or (http.user_agent contains "PerplexityBot") or (http.user_agent contains "ClaudeBot")
or (http.user_agent contains "Claude-Web") or (http.user_agent contains "Applebot")
or (http.user_agent contains "meta-externalagent") or (http.user_agent contains "cohere-ai")

# Then take action:  Skip
#   Skip: All remaining custom rules
#   Additionally skip:  [x] Managed Challenge  [x] Bot Fight Mode  [x] Browser Integrity Check
#
# ALSO: Security > Bots > enable "Allow verified bots".
# This is the #1 fix — until bots stop getting 403, NOTHING below can be crawled.

Phase 1 — Technical foundations (Week 1)

Shopify: Online Store → Themes → ⋯ → Edit code. Paste each block where noted, then Save.

Theme <head> — canonical, Open Graph, Twitter, locale ⬇ 01-theme-head.liquid

Paste inside in layout/theme.liquid, after the existing meta tags.

{%- comment -%} ===== Bikester Global — SEO/GEO head block (theme.liquid, inside <head>) ===== {%- endcomment -%}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="{{ canonical_url }}">

{%- comment -%} Open Graph + Twitter (Shopify outputs title/description; add the rest) {%- endcomment -%}
<meta property="og:site_name" content="Bikester Global">
<meta property="og:locale" content="en_IN">
<meta property="og:type" content="{% if request.page_type == 'product' %}product{% else %}website{% endif %}">
<meta property="og:title" content="{{ page_title }}">
<meta property="og:description" content="{{ page_description | default: shop.description | escape }}">
<meta property="og:url" content="{{ canonical_url }}">
<meta property="og:image" content="{% if page_image %}{{ page_image | image_url: width: 1200 }}{% else %}{{ settings.share_image | image_url: width: 1200 }}{% endif %}">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ page_title }}">
<meta name="twitter:description" content="{{ page_description | default: shop.description | escape }}">

{%- comment -%} Hreflang (only if you run an India store + global store) {%- endcomment -%}
<link rel="alternate" hreflang="en-in" href="{{ canonical_url }}">

{%- comment -%}
  PAGE TITLE + META for /pages/thane-store: set these in Shopify Admin >
  Online Store > Pages > Thane Store > "Edit website SEO":
    Page title : Bikester Global Thane Store | Motorcycle Helmets & Riding Gear Near You
    Description: Visit Bikester Global's Thane store for 40+ helmet & riding-gear brands.
                 Free fitment, EMI & 7-day exchange. Open 10:30 AM-9:30 PM. Call now.
{%- endcomment -%}
Organization schema (homepage) ⬇ 02-organization-schema.liquid

Paste near the end of in layout/theme.liquid. Replace phone/email/logo tokens.

{%- comment -%} Organization schema — render once on the homepage (theme.liquid) {%- endcomment -%}
{%- if template.name == 'index' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://bikesterglobal.com/#organization",
  "name": "Bikester Global",
  "legalName": "Bikester Global Private Limited",
  "url": "https://bikesterglobal.com/",
  "logo": "https://bikesterglobal.com/{{ settings.logo | image_url: width: 400 | remove_first: '//' }}",
  "description": "India's multi-brand motorcycle gear retailer — helmets, riding jackets, gloves, boots and accessories from 40+ brands. Stores in Mumbai, Thane and Pune.",
  "telephone": "{{ REPLACE_PHONE }}",
  "email": "{{ REPLACE_EMAIL }}",
  "sameAs": [
    "https://www.facebook.com/bikesterglobal.shop",
    "https://www.instagram.com/bikesterglobal.shop",
    "https://www.youtube.com/@bikesterglobal",
    "https://www.indiamart.com/bikesterglobal/"
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "979",
    "bestRating": "5"
  }
}
</script>
{%- endif -%}
LocalBusiness schema (Thane store page) ⬇ 03-localbusiness-thane.liquid

Same file. Replace every {{ REPLACE_… }} token with verified data from your Google Business Profile.

{%- comment -%} LocalBusiness schema — render on /pages/thane-store only {%- endcomment -%}
{%- if page.handle == 'thane-store' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "AutoPartsStore",
  "@id": "https://bikesterglobal.com/pages/thane-store#store",
  "name": "Bikester Global — Thane Store",
  "image": "https://bikesterglobal.com/{{ REPLACE_STORE_PHOTO }}",
  "url": "https://bikesterglobal.com/pages/thane-store",
  "telephone": "{{ REPLACE_PHONE }}",
  "priceRange": "₹₹",
  "currenciesAccepted": "INR",
  "paymentAccepted": "Cash, UPI, Credit Card, Debit Card, EMI",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "{{ REPLACE_STREET }}",
    "addressLocality": "Thane West",
    "addressRegion": "Maharashtra",
    "postalCode": "{{ REPLACE_PIN }}",
    "addressCountry": "IN"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "{{ REPLACE_LAT }}",
    "longitude": "{{ REPLACE_LNG }}"
  },
  "hasMap": "{{ REPLACE_GOOGLE_MAPS_URL }}",
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
    "opens": "10:30",
    "closes": "21:30"
  }],
  "parentOrganization": { "@id": "https://bikesterglobal.com/#organization" },
  "areaServed": [
    "Thane","Naupada","Pachpakhadi","Wagle Estate","Kopri","Manpada",
    "Kapurbawdi","Kasarvadavali","Kalwa","Mulund West","Airoli"
  ],
  "sameAs": [
    "https://www.facebook.com/bikesterglobal.shop",
    "https://www.instagram.com/bikesterglobal.shop"
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "979",
    "bestRating": "5"
  }
}
</script>
{%- endif -%}
BreadcrumbList schema (Thane store page) ⬇ 06-breadcrumblist.liquid
{%- comment -%} BreadcrumbList — /pages/thane-store (also render visible breadcrumbs in the template) {%- endcomment -%}
{%- if page.handle == 'thane-store' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://bikesterglobal.com/" },
    { "@type": "ListItem", "position": 2, "name": "Stores", "item": "https://bikesterglobal.com/pages/stores" },
    { "@type": "ListItem", "position": 3, "name": "Thane Store", "item": "https://bikesterglobal.com/pages/thane-store" }
  ]
}
</script>
{%- endif -%}
robots.txt.liquid & llms.txt ⬇ robots.txt.liquid ⬇ llms.txt

robots.txt.liquid → create templates/robots.txt.liquid in your theme. llms.txt → serve at the site root (use a Cloudflare Worker or redirect, since Shopify can’t host arbitrary root files); both files are in the download bundle.

{%- comment -%}
  Bikester Global — custom robots.txt
  Shopify: Online Store > Themes > Edit code > templates > robots.txt.liquid
  This KEEPS Shopify's safe defaults, then explicitly welcomes search + AI crawlers
  and points every engine at the sitemap. Pair this with a Cloudflare WAF "Skip" rule
  for the same user-agents (see Cloudflare-bot-allow.txt) — robots.txt alone will NOT
  fix a 403 coming from the WAF.
{%- endcomment -%}
{%- for group in robots.default_groups -%}
  {{- group.user_agent }}

  {%- for rule in group.rules -%}
    {{ rule }}
  {%- endfor -%}

  {%- if group.sitemap != blank -%}
    {{ group.sitemap }}
  {%- endif -%}
{%- endfor -%}

# --- Explicitly welcome AI answer-engine crawlers (GEO/AEO) ---
User-agent: GPTBot
Allow: /

User-agent: OAI-SearchBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: Claude-Web
Allow: /

User-agent: Google-Extended
Allow: /

User-agent: Applebot-Extended
Allow: /

User-agent: cohere-ai
Allow: /

# Sitemap (Shopify auto-generates this)
Sitemap: {{ shop.url }}/sitemap.xml

Phase 2 — AEO / GEO content (Week 2)

Keep the visible Q&A on the page identical to the schema text, or Google will ignore it.

FAQPage schema (Thane store page) ⬇ 04-faqpage-thane.liquid

Mirror these exact questions/answers as visible content on the page.

{%- comment -%} FAQPage schema — /pages/thane-store. Keep the visible Q&A on the page identical to this. {%- endcomment -%}
{%- if page.handle == 'thane-store' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Where is the Bikester Global Thane store located?",
      "acceptedAnswer": { "@type": "Answer",
        "text": "Bikester Global's Thane store is in Khopat, Thane West, Maharashtra. It is a short ride from Naupada, Pachpakhadi, Wagle Estate, Kopri and Kalwa, with free customer parking nearby." }
    },
    {
      "@type": "Question",
      "name": "What are the Thane store opening hours?",
      "acceptedAnswer": { "@type": "Answer",
        "text": "The Thane store is open every day from 10:30 AM to 9:30 PM, including Sundays and most public holidays." }
    },
    {
      "@type": "Question",
      "name": "Which motorcycle gear brands does the Thane store stock?",
      "acceptedAnswer": { "@type": "Answer",
        "text": "The Thane store stocks 40+ brands of helmets and riding gear including AGV, Shoei, LS2, SMK, Studds, AutoForm, Alpinestars and Rynox, plus gloves, boots, rain gear, luggage and accessories." }
    },
    {
      "@type": "Question",
      "name": "Do you offer EMI and free helmet fitment in Thane?",
      "acceptedAnswer": { "@type": "Answer",
        "text": "Yes. The Thane store offers no-cost EMI on eligible purchases and free in-store helmet fitment and size consultation, usually completed in under 10 minutes." }
    },
    {
      "@type": "Question",
      "name": "Can I exchange a helmet bought at the Thane store?",
      "acceptedAnswer": { "@type": "Answer",
        "text": "Yes. Unused helmets in original packaging with tags can be exchanged within 7 days of purchase, subject to our exchange policy." }
    }
  ]
}
</script>
{%- endif -%}
HowTo schema — choose helmet size ⬇ 05-howto-helmet-size.liquid
{%- comment -%} HowTo schema — "How to choose the right helmet size" (helps AI + How-To rich result) {%- endcomment -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to choose the right motorcycle helmet size",
  "totalTime": "PT5M",
  "step": [
    { "@type": "HowToStep", "position": 1, "name": "Measure your head",
      "text": "Wrap a soft tape around the widest part of your head, about 2 cm above the eyebrows. Note the circumference in centimetres." },
    { "@type": "HowToStep", "position": 2, "name": "Match to the size chart",
      "text": "Compare your measurement to the brand size chart. Helmet sizing differs between AGV, LS2, Studds and other brands." },
    { "@type": "HowToStep", "position": 3, "name": "Check the cheek pads",
      "text": "A correct fit presses firmly on the cheeks without pain. Cheek pads loosen ~15% after break-in, so snug is correct." },
    { "@type": "HowToStep", "position": 4, "name": "Do the roll test",
      "text": "Fasten the strap and try to roll the helmet forward off your head. If it comes off, it is too big." },
    { "@type": "HowToStep", "position": 5, "name": "Wear it for 5 minutes",
      "text": "Keep it on for five minutes to find pressure points. Visit the Thane store for free expert fitment." }
  ]
}
</script>
Speakable schema (voice search) ⬇ 08-speakable.liquid

Add the matching CSS classes (.store-address, .store-hours, .store-phone) to those elements.

{%- comment -%} Speakable — add the CSS selectors of your address + hours blocks on the Thane page {%- endcomment -%}
{%- if page.handle == 'thane-store' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "Bikester Global Thane Store",
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [".store-address", ".store-hours", ".store-phone"]
  },
  "url": "https://bikesterglobal.com/pages/thane-store"
}
</script>
{%- endif -%}
Product + AggregateRating (★ snippets) ⬇ 07-product-aggregaterating.liquid

Product template. Wire the rating to your Judge.me / Shopify review metafields.

{%- comment -%}
  Product + AggregateRating — product template (sections/main-product.liquid or product.json template).
  This makes Google show ★ star snippets. Replace the rating with your Judge.me metafields.
{%- endcomment -%}
{%- if request.page_type == 'product' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "image": [{{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }}],
  "description": {{ product.description | strip_html | truncatewords: 60 | json }},
  "sku": {{ product.selected_or_first_available_variant.sku | json }},
  "brand": { "@type": "Brand", "name": {{ product.vendor | json }} },
  "offers": {
    "@type": "Offer",
    "url": {{ shop.url | append: product.url | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "price": "{{ product.selected_or_first_available_variant.price | divided_by: 100.0 }}",
    "availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
    "itemCondition": "https://schema.org/NewCondition"
  }
  {%- if product.metafields.judgeme.badge -%},
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "{{ product.metafields.reviews.rating.value.rating | default: 4.7 }}",
    "reviewCount": "{{ product.metafields.reviews.rating_count | default: 1 }}"
  }
  {%- endif -%}
}
</script>
{%- endif -%}

Phase 3 — Hyper-local locality pages (Weeks 3–6)

One reusable template → 10 town pages. Pair each launch with the 7-day sprint in the audit report.

Locality page template (reuse per town) ⬇ 09-locality-page-template.liquid

Create a page per town; feed town name + directions via metafields, or hard-code per page.

{%- comment -%}
  LOCALITY PAGE TEMPLATE — duplicate per town (Naupada, Wagle Estate, Kopri, ...).
  Easiest path on Shopify: create a Page + a custom page template
  "page.locality.liquid", then set the locality fields via theme app blocks
  or hard-code per page. Below is a self-contained section you can paste into
  a custom Liquid section and reuse.
{%- endcomment -%}
{%- assign town = page.metafields.local.town | default: "Naupada" -%}
{%- assign drive = page.metafields.local.drive_minutes | default: "10" -%}

<section class="locality-hero">
  <nav class="breadcrumbs" aria-label="Breadcrumb">
    <a href="/">Home</a> › <a href="/pages/thane-store">Thane Store</a> › <span>{{ town }}</span>
  </nav>
  <h1>Motorcycle Gear Shop near {{ town }} — Bikester Global Thane</h1>
  <p class="lede">
    Looking for a helmet or riding-gear shop near {{ town }}? Bikester Global's
    Thane store is just a {{ drive }}-minute ride away, stocking 40+ brands of
    helmets, jackets, gloves and boots with free fitment, EMI and 7-day exchange.
  </p>
  <div class="cta-row">
    <a class="btn btn-call" href="tel:{{ REPLACE_PHONE }}">📞 Call the store</a>
    <a class="btn btn-map" href="{{ REPLACE_GOOGLE_MAPS_URL }}" target="_blank" rel="noopener">📍 Directions from {{ town }}</a>
    <a class="btn btn-wa" href="https://wa.me/{{ REPLACE_WA_NUMBER }}?text=Hi, I'm from {{ town | url_encode }} and want to visit the Thane store">💬 WhatsApp us</a>
  </div>

  <h2>How to reach us from {{ town }}</h2>
  <p>{{ page.metafields.local.directions }}</p>

  <h2>What {{ town }} riders buy most</h2>
  <ul>
    <li>Full-face and modular helmets (AGV, LS2, SMK, Studds)</li>
    <li>All-weather riding jackets and rain gear</li>
    <li>Gloves, boots and back protectors</li>
  </ul>
</section>

{%- comment -%} Per-locality LocalBusiness + FAQ schema {%- endcomment -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "AutoPartsStore",
  "name": "Bikester Global — Motorcycle Gear near {{ town }}, Thane",
  "url": "{{ canonical_url }}",
  "telephone": "{{ REPLACE_PHONE }}",
  "areaServed": "{{ town }}",
  "parentOrganization": { "@id": "https://bikesterglobal.com/#organization" },
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.7", "reviewCount": "979" }
}
</script>
The 10 towns within 6 km: Naupada · Pachpakhadi · Wagle Estate · Kopri · Manpada · Kapurbawdi · Kasarvadavali · Kalwa · Mulund West · Airoli. Full 7-day action plan + keywords for each is in the audit report.

Phase 4 — Conversion + attribution (ongoing)

Turn rankings into walk-ins, and prove it in GA4.

Sticky mobile CTA bar (Call / WhatsApp / Directions) ⬇ 10-sticky-cta.liquid

Renders on mobile only. Replace phone + WhatsApp number + Google Maps URL.

<!-- STICKY MOBILE CONVERSION BAR — paste in sections/store-cta.liquid, render on store pages -->
<div class="bg-sticky-cta" role="group" aria-label="Contact Bikester Global Thane">
  <a class="bg-cta bg-cta--call" href="tel:{{ REPLACE_PHONE }}">
    <span aria-hidden="true">📞</span> Call
  </a>
  <a class="bg-cta bg-cta--wa" href="https://wa.me/{{ REPLACE_WA_NUMBER }}?text=Hi%2C%20I%20want%20to%20visit%20the%20Thane%20store" rel="noopener">
    <span aria-hidden="true">💬</span> WhatsApp
  </a>
  <a class="bg-cta bg-cta--map" href="{{ REPLACE_GOOGLE_MAPS_URL }}" target="_blank" rel="noopener">
    <span aria-hidden="true">📍</span> Directions
  </a>
</div>

<style>
.bg-sticky-cta{position:fixed;left:0;right:0;bottom:0;z-index:999;display:grid;
  grid-template-columns:1fr 1fr 1fr;gap:1px;background:#E2E8F0;
  box-shadow:0 -2px 12px rgba(0,0,0,.12)}
.bg-cta{display:flex;align-items:center;justify-content:center;gap:6px;
  padding:14px 8px;font:600 15px/1 Arial,sans-serif;text-decoration:none;color:#fff}
.bg-cta--call{background:#16A34A}.bg-cta--wa{background:#25D366}.bg-cta--map{background:#2563EB}
.bg-cta:active{filter:brightness(.92)}
@media(min-width:900px){.bg-sticky-cta{display:none}} /* mobile only */
</style>
GA4 conversion events for the CTAs ⬇ 11-ga4-events.liquid

Lets you attribute calls, WhatsApp chats and directions clicks back to organic traffic.

<!-- GA4 conversion events — track the CTAs so you can prove SEO -> sales -->
<!-- Requires GA4 (gtag.js) already installed via Shopify or Google & YouTube app. -->
<script>
  document.addEventListener('click', function (e) {
    var el = e.target.closest('a');
    if (!el || typeof gtag === 'undefined') return;
    var href = el.getAttribute('href') || '';
    if (href.startsWith('tel:'))            gtag('event', 'click_to_call',   { store: 'thane' });
    else if (href.indexOf('wa.me') > -1)    gtag('event', 'whatsapp_click',  { store: 'thane' });
    else if (href.indexOf('maps') > -1 ||
             href.indexOf('goo.gl/maps')>-1)gtag('event', 'directions_click',{ store: 'thane' });
  });
</script>

3. KPIs — how to know it's working

#1–3
Google Map Pack for "helmet shop Thane"
10+
locality keywords on page 1 (90 days)
★ 4.7
rating snippet live in SERP
Cited
in Perplexity / ChatGPT "where to buy" answers
ToolWhat to watchCadence
Google Search ConsoleImpressions/clicks for "Thane + helmet/gear" queries; coverage = indexed (not blocked).Weekly
Google Business Profile insightsCalls, direction requests, website clicks from the Thane listing.Weekly
GA4click_to_call, whatsapp_click, directions_click events by landing page.Weekly
Perplexity / ChatGPT / ClaudeAsk "where to buy AGV helmet in Thane?" — check if Bikester is named & linked.Monthly
Rank tracker (e.g. free SERP check)Position for the locality keyword set from the audit.Bi-weekly