SEO and GEO (AI search optimization)
Hyprism is built for both traditional SEO (Google, Bing) and GEO — Generative Engine Optimization, the emerging practice of making your store discoverable, citable, and quotable by AI search engines (ChatGPT, Claude, Perplexity, Google AI Overviews, Bing Copilot, Gemini).
This chapter covers the SEO/GEO setup that Hyprism provides out-of-the-box and how to customize it.
13.1 Why GEO matters
Section titled “13.1 Why GEO matters”Traditional SEO targets crawlers (Googlebot, Bingbot) that index pages, store them, and rank them for keyword queries. AI search engines work differently:
- They want structured, citable facts.
- They want clear semantic HTML they can parse and quote.
- They want
llms.txt— a markdown-formatted site map written for AI consumption. - They want clear authorship and trust signals (E-E-A-T: Experience, Expertise, Authoritativeness, Trustworthiness).
- They favor brand consistency across the web (the Organization schema’s
sameAsarray linking to your social profiles).
Hyprism includes hooks for all of these so your store is positioned to show up in AI-generated answers — not just Google search results.
13.2 SEO/GEO theme settings
Section titled “13.2 SEO/GEO theme settings”Theme settings → SEO and GEO. The tab has 5 subheaders: Schema types, Organization details, Business contact (LocalBusiness), Twitter / X, Reviews threshold.
Master kill-switch
Section titled “Master kill-switch”| Setting | What it does |
|---|---|
| 🔧 Enable schema emission | Master kill-switch for ALL JSON-LD schemas. ✅ Default on. Turn off if a SEO app (e.g., StoreSEO) emits schemas itself to avoid duplicates. When off, the per-schema toggles below all hide. |
Schema types (10 toggles, all visible_if Enable schema emission)
Section titled “Schema types (10 toggles, all visible_if Enable schema emission)”Each toggle controls whether one schema type is emitted in the page <head>. Default state is shown for each.
| Setting | What it does | Default |
|---|---|---|
| 🔧 Organization schema | Identifies the storefront as a business entity. Built from the Organization details below + Social media sameAs URLs. | ✅ on |
| 🔧 WebSite schema | Site-wide WebSite schema with SearchAction so Google can offer a “search this site” sitelink in results. | ✅ on |
| 🔧 Product schema | Per-product Product schema (price, availability, variants, brand, sku, etc.) emitted on every product page. | ❌ off |
| 🔧 Article schema | Per-article Article schema (author, date, image, body) emitted on every blog article. | ✅ on |
| 🔧 BreadcrumbList schema | Breadcrumb trail markup on product / collection / article / page templates. | ❌ off |
| 🔧 LocalBusiness schema | Emits LocalBusiness schema using the Business contact fields below. | ⬜ off |
| 🔧 FAQ schema | Auto-builds FAQPage schema (client-side) from collapsible-content sections on any page. | ✅ on |
| 🔧 Video schema | Auto-builds VideoObject schema from video sections. | ✅ on |
| 🔧 HowTo schema | Auto-builds HowTo schema from multicolumn sections that opt into the how-to format. | ✅ on |
Organization details
Section titled “Organization details”| Setting | What it does |
|---|---|
| 🔧 Organization name | Free text. If left blank, falls back to shop.name. |
| 🔧 Organization logo URL | Image picker. If left blank, falls back to the global settings.logo from the Branding tab. |
| 🔧 Organization description | Textarea. 160-character max recommended. Used as the Organization-schema description and as a fallback for any page-level meta description that’s missing. |
| 🔧 Home meta description | Textarea. Optional override for the homepage <meta name="description">. 150-160 characters recommended. Falls back to organization description, then to shop.description. |
Business contact (LocalBusiness)
Section titled “Business contact (LocalBusiness)”Used only when LocalBusiness schema is on (or when the map section needs structured-data context).
| Setting | What it does |
|---|---|
| 🔧 Business type | The LocalBusiness subtype. 16 options — generic ones (LocalBusiness, Store, Restaurant) plus 13 specialized ones (ClothingStore, ShoeStore, JewelryStore, BookStore, ElectronicsStore, FurnitureStore, GroceryStore, HomeGoodsStore, SportingGoodsStore, BeautySalon, Bakery, Cafe, BarOrPub). ✅ Default LocalBusiness (generic). Pick the most specific match — Google ranks specialized types higher for the relevant queries. |
| 🔧 Street address | Free text. |
| 🔧 Postal code / ZIP | Free text. |
| 🔧 City | Free text. |
| 🔧 Region / state / province | Free text. |
| 🔧 Country | Free text. |
| 🔧 Phone | Free text. E.164 format recommended: +1-555-555-5555. |
| Customer-service email. | |
| 🔧 Opening hours | Free text. Schema.org OpeningHoursSpecification format recommended, e.g. Mo-Fr 09:00-17:00 / Sa 10:00-15:00. |
| 🔧 Price range | Select: blank (✅ default — no value emitted) / $ / $$ / $$$ / $$$$. Used by some result-page Knowledge Panels. |
AI crawlers (robots.txt) — post-install, not a theme setting
Section titled “AI crawlers (robots.txt) — post-install, not a theme setting”Shopify generates a working /robots.txt automatically, and the Theme Store rules forbid a theme from shipping a robots.txt.liquid template — so Hyprism does not ship one, and there are no AI-crawler toggles in the theme settings. Out of the box, AI crawlers follow Shopify’s platform default robots.txt.
If you want to explicitly allow AI crawlers for AI-search visibility (so ChatGPT / Claude / Perplexity / Gemini / Apple Intelligence can read and cite your products), add a robots.txt.liquid template yourself after installing:
- Online Store → Themes → ⋯ → Edit code
- Templates → Add a new template → type
robots.txt(Liquid) - Paste a self-contained snippet that keeps Shopify’s defaults (
{{ robots.default_groups }}) and appendsUser-agent: GPTBot/Allow: /blocks for each AI crawler.
A ready-to-paste, self-contained version (no theme settings required) ships in the theme’s documentation package at docs/submission/_excluded-from-theme/robots.txt.liquid. To block a specific bot, change its Allow: / to Disallow: /. To revert entirely, delete the template — Shopify’s default returns.
⚠️ This is an unsupported Shopify customization; a malformed robots.txt can deindex your whole store. Most stores should simply allow AI crawlers — being citable in AI answers drives a growing share of e-commerce discovery.
Twitter / X
Section titled “Twitter / X”| Setting | What it does |
|---|---|
| 🔧 Twitter handle | Free text. Without the @. Used as the twitter:site meta tag so Twitter / X cards attribute shared links to your brand handle. |
Reviews threshold
Section titled “Reviews threshold”| Setting | What it does |
|---|---|
| 🔧 Min reviews for aggregateRating | Range 5–100, step 5. ✅ Default 10. Only emit aggregateRating schema for products with ≥N reviews. Below the threshold, the rating is omitted to avoid misleading single-review averages and to keep your Google product-result stars credible. |
What’s NOT in this tab
Section titled “What’s NOT in this tab”- Social profile URLs (sameAs array) — those live in the separate Social media tab. The Organization schema reads them from there at render time. See §2.1 for the cross-reference list.
- Logo and favicon — in the Branding tab. See §2.1.
13.3 JSON-LD schemas
Section titled “13.3 JSON-LD schemas”Hyprism auto-emits these structured-data schemas in the page <head>:
Organization (every page)
Section titled “Organization (every page)”{ "@context": "https://schema.org", "@type": "Organization", "name": "Your Store", "url": "https://yourstore.com", "logo": "https://...", "description": "Your organization description.", "sameAs": [ "https://facebook.com/...", "https://instagram.com/...", ... ], "contactPoint": { "@type": "ContactPoint", "telephone": "+...", "contactType": "customer service", "email": "..." }}WebSite (every page)
Section titled “WebSite (every page)”{ "@context": "https://schema.org", "@type": "WebSite", "name": "Your Store", "url": "https://yourstore.com", "potentialAction": { "@type": "SearchAction", "target": "https://yourstore.com/search?q={search_term_string}", "query-input": "required name=search_term_string" }}This enables Google’s site-search-results integration in search-engine results.
Product (every product page)
Section titled “Product (every product page)”{ "@context": "https://schema.org", "@type": "Product", "name": "Product Title", "image": [...], "description": "...", "sku": "...", "brand": { "@type": "Brand", "name": "Vendor" }, "offers": { "@type": "AggregateOffer", "lowPrice": "10.00", "highPrice": "20.00", "priceCurrency": "EUR", "offerCount": "3" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.8", "reviewCount": "127" }}Unlocks the Google Rich Results treatment — products show price + rating + availability in search.
BreadcrumbList (product, collection, article, page)
Section titled “BreadcrumbList (product, collection, article, page)”Visualized as “Home > Category > Product” in Google search results.
Article (article pages)
Section titled “Article (article pages)”{ "@context": "https://schema.org", "@type": "Article", "headline": "Article Title", "image": [...], "datePublished": "2026-05-12T10:00:00Z", "dateModified": "2026-05-13T11:00:00Z", "author": { "@type": "Person", "name": "Author Name", "url": "..." }, "publisher": { "@type": "Organization", ... }}LocalBusiness (when map section exists)
Section titled “LocalBusiness (when map section exists)”Full LocalBusiness with geo coordinates, address, phone, opening hours.
FAQ (when Collapsible Content section + setting on)
Section titled “FAQ (when Collapsible Content section + setting on)”Each accordion item becomes a FAQ question/answer pair. Unlocks Google’s FAQ rich result.
Review (when Testimonials section + setting on)
Section titled “Review (when Testimonials section + setting on)”Each testimonial becomes a Review (with rating, author, date).
VideoObject (when Video section + setting on)
Section titled “VideoObject (when Video section + setting on)”For embedded videos — name, description, thumbnailUrl, uploadDate, duration.
HowTo (when Multicolumn section type = “how-to” + setting on)
Section titled “HowTo (when Multicolumn section type = “how-to” + setting on)”Each multicolumn column becomes a HowToStep.
13.4 Meta tags
Section titled “13.4 Meta tags”The snippets/meta-tags.liquid snippet emits a comprehensive meta tag suite:
<title>Page Title | Shop Name</title><meta name="description" content="..."><link rel="canonical" href="...">
<!-- OpenGraph --><meta property="og:title" content="..."><meta property="og:description" content="..."><meta property="og:image" content="..."> <!-- 1200×630 --><meta property="og:url" content="..."><meta property="og:type" content="..."> <!-- website / article / product --><meta property="og:site_name" content="..."><meta property="og:locale" content="en_US"><meta property="og:locale:alternate" content="de_DE">
<!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@yourbrand"><meta name="twitter:title" content="..."><meta name="twitter:description" content="..."><meta name="twitter:image" content="...">
<!-- Article-specific --><meta property="article:author" content="..."><meta property="article:published_time" content="..."><meta property="article:modified_time" content="...">
<!-- Product-specific --><meta property="product:price:amount" content="10.00"><meta property="product:price:currency" content="EUR"><meta property="product:availability" content="in stock">
<!-- hreflang for multi-locale stores --><link rel="alternate" hreflang="en" href=".../en/..."><link rel="alternate" hreflang="de" href=".../de/...">
<!-- Atom feed for blogs --><link rel="alternate" type="application/atom+xml" href="/blogs/.../articles.atom">
<!-- LLM-readable site map --><link rel="alternate" type="text/markdown" href="/pages/llms" title="LLM-readable site directory">Meta-description fallback chain
Section titled “Meta-description fallback chain”For each page, Hyprism falls back through:
- Page-specific meta description (if set in Shopify Admin)
- Section-specific description (if applicable)
Theme settings → SEO → Home meta description(home page only)Theme settings → SEO & GEO → Organization descriptionshop.description(from Shopify Admin → Settings → Online Store)shop.name(last resort)
This ensures every page has a useful meta description, never empty.
13.5 llms.txt
Section titled “13.5 llms.txt”llms.txt is the emerging standard for AI-discoverable site maps in markdown.
- Create a Shopify Page (Admin → Pages → Add page).
- Title: “llms.txt” (or anything — handle matters).
- Handle:
llms(set in Page details). - Set Theme Template:
llms-txt(Hyprism providestemplates/page.llms-txt.liquid). - Visit
/pages/llmsto see the auto-generated llms.txt.
What it contains
Section titled “What it contains”# Your Store
> Your organization description.
## Collections
- [New arrivals](/collections/new): The latest products...- [Best sellers](/collections/best-sellers): Our most-loved items...
## Products
- [Product A](/products/product-a): Description...- [Product B](/products/product-b): Description...
## Pages
- [About](/pages/about): About content...
## Articles
- [Article Title](/blogs/news/article-handle): Excerpt...The page is paginated for stores with many products (100 per page). Most AI systems read just the first page; that’s fine — they get a representative catalog map.
Discovery
Section titled “Discovery”The <head> of every page contains <link rel="alternate" type="text/markdown" href="/pages/llms">. AI crawlers that respect this convention find your llms.txt without you announcing it.
13.6 Robots.txt customization
Section titled “13.6 Robots.txt customization”The Theme Store rules forbid a theme from shipping a robots.txt.liquid template, so Hyprism does not ship one — Shopify generates a working /robots.txt automatically (see §13.2). If you want to explicitly allow AI crawlers, add your own templates/robots.txt.liquid after installing. A ready-to-paste, self-contained version lives in the theme’s documentation package at docs/submission/_excluded-from-theme/robots.txt.liquid; it keeps Shopify’s defaults and appends Allow rules per crawler:
# Shopify default groups (Disallow /admin, /cart, /orders, /checkouts, etc.){{ robots.default_groups }}
# AI crawlers (explicit Allow rules)User-agent: GPTBotAllow: /
User-agent: ClaudeBotAllow: /
User-agent: PerplexityBotAllow: /
# ...plus Google-Extended, Applebot-Extended, CCBot, etc.
Sitemap: https://yourstore.com/sitemap.xmlShopify’s default groups protect the admin and customer-private areas; the snippet adds the AI-crawler allowlist on top. To block a specific bot, change its Allow: / to Disallow: /. To revert, delete the template — Shopify’s default returns.
13.7 Image SEO
Section titled “13.7 Image SEO”| Setting | Where | What it does |
|---|---|---|
| Alt-text fallback | Per-section (hero, product, article, etc.) | If image.alt is empty, fall back to product/article/shop name |
| Lazy-loading | Auto by section position | First 1–2 sections above the fold = loading="eager" fetchpriority="high"; rest = loading="lazy" |
decoding="async" | All images | Browser can decode images off-main-thread |
| AVIF / WebP | All images | Via Shopify CDN — Hyprism uses Shopify’s image_url filter |
13.8 Sitemap
Section titled “13.8 Sitemap”Shopify auto-generates sitemap.xml at the root of every store. Hyprism doesn’t need to do anything for this — it’s a Shopify-platform feature. Hyprism just emits the sitemap reference in robots.txt.
For multi-locale stores, Shopify also auto-generates per-locale sitemaps and hreflang annotations.
13.9 Validation
Section titled “13.9 Validation”Before submitting your theme to the Shopify Theme Store (or for your own SEO peace-of-mind), validate the schemas:
| Tool | What it checks |
|---|---|
| Schema.org Validator | Each JSON-LD block is valid Schema.org markup |
| Google Rich Results Test | Will this page be eligible for Google’s rich-result treatments (FAQ, Product, Article, etc.)? |
| Facebook Sharing Debugger | OpenGraph tags render correctly when shared on Facebook |
| Twitter Card Validator | Twitter cards render correctly |
| hreflang.org | Multi-locale hreflang annotations are valid |
Hyprism’s defaults pass all of these on first submit — see the SEO/GEO validation report in docs/audits/.
Chapter 14 — Performance and optimization — Core Web Vitals, lazy-loading strategies, asset optimization.