What's in this pack
1. How this ranks you & how AI engines find you
Three audiences, one page. Each needs a different signal:
| Engine | What it rewards | What 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 / Gemini | Clear facts, FAQ structure, entity clarity, fresh citable data. | FAQPage + HowTo schema, question-shaped H2s, "Thane Rider Index" first-party data. |
| ChatGPT Search / Perplexity / Claude | Accessible 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. |
2. The roadmap
| Phase | When | Goal | Actions | Outcome |
|---|---|---|---|---|
| Phase 0 | Day 0–1 | Unblock 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 1 | Week 1 | Technical foundations | Ship 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 2 | Week 2 | AEO / GEO content | Add 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 3 | Weeks 3–6 | Hyper-local expansion | Build 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 4 | Ongoing | Authority + conversion | Sticky 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.
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.
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 -%}
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 -%}
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 -%}
{%- 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 → 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.
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 -%}
{%- 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>
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 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.
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>
Phase 4 — Conversion + attribution (ongoing)
Turn rankings into walk-ins, and prove it in GA4.
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>
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
| Tool | What to watch | Cadence |
|---|---|---|
| Google Search Console | Impressions/clicks for "Thane + helmet/gear" queries; coverage = indexed (not blocked). | Weekly |
| Google Business Profile insights | Calls, direction requests, website clicks from the Thane listing. | Weekly |
| GA4 | click_to_call, whatsapp_click, directions_click events by landing page. | Weekly |
| Perplexity / ChatGPT / Claude | Ask "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 |