Skip to content

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.

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 sameAs array 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.

Theme settings → SEO and GEO. The tab has 5 subheaders: Schema types, Organization details, Business contact (LocalBusiness), Twitter / X, Reviews threshold.

SettingWhat it does
🔧 Enable schema emissionMaster 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.

SettingWhat it doesDefault
🔧 Organization schemaIdentifies the storefront as a business entity. Built from the Organization details below + Social media sameAs URLs.✅ on
🔧 WebSite schemaSite-wide WebSite schema with SearchAction so Google can offer a “search this site” sitelink in results.✅ on
🔧 Product schemaPer-product Product schema (price, availability, variants, brand, sku, etc.) emitted on every product page.❌ off
🔧 Article schemaPer-article Article schema (author, date, image, body) emitted on every blog article.✅ on
🔧 BreadcrumbList schemaBreadcrumb trail markup on product / collection / article / page templates.❌ off
🔧 LocalBusiness schemaEmits LocalBusiness schema using the Business contact fields below.⬜ off
🔧 FAQ schemaAuto-builds FAQPage schema (client-side) from collapsible-content sections on any page.✅ on
🔧 Video schemaAuto-builds VideoObject schema from video sections.✅ on
🔧 HowTo schemaAuto-builds HowTo schema from multicolumn sections that opt into the how-to format.✅ on
SettingWhat it does
🔧 Organization nameFree text. If left blank, falls back to shop.name.
🔧 Organization logo URLImage picker. If left blank, falls back to the global settings.logo from the Branding tab.
🔧 Organization descriptionTextarea. 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 descriptionTextarea. Optional override for the homepage <meta name="description">. 150-160 characters recommended. Falls back to organization description, then to shop.description.

Used only when LocalBusiness schema is on (or when the map section needs structured-data context).

SettingWhat it does
🔧 Business typeThe 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 addressFree text.
🔧 Postal code / ZIPFree text.
🔧 CityFree text.
🔧 Region / state / provinceFree text.
🔧 CountryFree text.
🔧 PhoneFree text. E.164 format recommended: +1-555-555-5555.
🔧 EmailCustomer-service email.
🔧 Opening hoursFree text. Schema.org OpeningHoursSpecification format recommended, e.g. Mo-Fr 09:00-17:00 / Sa 10:00-15:00.
🔧 Price rangeSelect: 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:

  1. Online Store → Themes → ⋯ → Edit code
  2. Templates → Add a new template → type robots.txt (Liquid)
  3. Paste a self-contained snippet that keeps Shopify’s defaults ({{ robots.default_groups }}) and appends User-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.

SettingWhat it does
🔧 Twitter handleFree text. Without the @. Used as the twitter:site meta tag so Twitter / X cards attribute shared links to your brand handle.
SettingWhat it does
🔧 Min reviews for aggregateRatingRange 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.
  • 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.

Hyprism auto-emits these structured-data schemas in the page <head>:

{
"@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": "..."
}
}
{
"@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.

{
"@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.

{
"@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", ... }
}

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.

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">

For each page, Hyprism falls back through:

  1. Page-specific meta description (if set in Shopify Admin)
  2. Section-specific description (if applicable)
  3. Theme settings → SEO → Home meta description (home page only)
  4. Theme settings → SEO & GEO → Organization description
  5. shop.description (from Shopify Admin → Settings → Online Store)
  6. shop.name (last resort)

This ensures every page has a useful meta description, never empty.

llms.txt is the emerging standard for AI-discoverable site maps in markdown.

  1. Create a Shopify Page (Admin → Pages → Add page).
  2. Title: “llms.txt” (or anything — handle matters).
  3. Handle: llms (set in Page details).
  4. Set Theme Template: llms-txt (Hyprism provides templates/page.llms-txt.liquid).
  5. Visit /pages/llms to see the auto-generated llms.txt.
# 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.

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.

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: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
# ...plus Google-Extended, Applebot-Extended, CCBot, etc.
Sitemap: https://yourstore.com/sitemap.xml

Shopify’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.

SettingWhereWhat it does
Alt-text fallbackPer-section (hero, product, article, etc.)If image.alt is empty, fall back to product/article/shop name
Lazy-loadingAuto by section positionFirst 1–2 sections above the fold = loading="eager" fetchpriority="high"; rest = loading="lazy"
decoding="async"All imagesBrowser can decode images off-main-thread
AVIF / WebPAll imagesVia Shopify CDN — Hyprism uses Shopify’s image_url filter

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.

Before submitting your theme to the Shopify Theme Store (or for your own SEO peace-of-mind), validate the schemas:

ToolWhat it checks
Schema.org ValidatorEach JSON-LD block is valid Schema.org markup
Google Rich Results TestWill this page be eligible for Google’s rich-result treatments (FAQ, Product, Article, etc.)?
Facebook Sharing DebuggerOpenGraph tags render correctly when shared on Facebook
Twitter Card ValidatorTwitter cards render correctly
hreflang.orgMulti-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.