Peregrinedocs

SEO Features

Peregrine treats SEO as a built-in system, not an afterthought — heading structure, structured data and page speed are handled by the theme so you don't need an app to fix them.

Merchant-controlled heading tags

Every section heading has a Heading tag (H1–H6) control next to its text field. Slide it and the heading renders as that tag — <h3> instead of <h2>, say — without changing the visual size at all. Tag = meaning for search engines; theme settings = appearance. They're deliberately independent, so you can build a perfect semantic outline without ever compromising the design.

The H1 guarantee

Exactly one H1 on every page, with zero effort — and full override control when you want it. Three tiers, top priority first:

  1. Your explicit choice wins. Set any section's heading tag to H1 — an About block at the bottom of the homepage, anywhere — and that's the page's H1. The theme's automatic H1 detects it and steps down to H2 by itself.
  2. Automatic assignment. With no explicit H1, the slideshow's Auto mode gives the H1 to the first slide that has a heading — surviving image-only first slides, slide deletion and reordering.
  3. The safety net. If nothing on the page provides an H1 at all (an image-only homepage, for instance), Peregrine injects a visually-hidden H1 containing your store name — invisible to shoppers, fully visible to search engines and screen readers.
Why it matters: most themes let merchants accidentally build pages with no H1 or five of them. Peregrine makes the wrong outcome impossible while keeping you in charge.

Structured data (JSON-LD)

Rendered server-side on every relevant page — no app, no JavaScript dependency. Entities carry stable @id identifiers and reference each other (the website declares the organization as its publisher, breadcrumbs are anchored to their page), so search engines see one connected graph rather than disconnected fragments:

SchemaWhereWhat it earns
OrganizationEvery pageBrand identity + social profiles (sameAs)
WebSite + SearchActionHomepageEligibility for the Google sitelinks search box
Product (per-variant offers)Product pagesPrice, availability and review-ready rich results
CollectionPage + ItemListCollection pagesDeclares the page and its product list as structured entities
Blog + BlogPostingBlog index and articlesArticle rich results — headline, image, author, dates
FAQPageAny page carrying an FAQ section, when its own switch is onDescribes your questions and answers as a structured Q&A set. See the note below on what this does and does not do today.
BreadcrumbListProduct, collection, page, blog, article, searchBreadcrumb trails in search listings
About FAQ structured data. Google restricted FAQ rich results in August 2023: the expandable questions under a search listing are now shown only for well-known, authoritative government and health sites. For a shop, FAQPage markup will not produce that rich snippet, and any theme telling you otherwise is selling you a 2022 feature. It is still worth switching on — it describes your questions and answers in a form search engines and AI answer engines can read directly, which matters more each year for the assistants that summarise pages rather than link to them, and Bing and others still treat it as a signal. Just don't expect it to change how your listing looks in Google.

Where the data comes from — and how to change it

Peregrine doesn't invent any of this content — every tag and schema value is read from data you already control in the Shopify admin. If something looks wrong in a search result or a social share, this table tells you where to fix it:

OutputComes fromEdit it at
Page title & meta descriptionEach resource's search engine listingThe Search engine listing panel at the bottom of any product, collection, page or blog post edit screen (click Edit website SEO). Homepage: Online Store → Preferences.
Product structured dataThe product recordProduct edit screen — title, description, images, price and compare-at price, SKU, and inventory (which drives availability).
Organization structured dataStore identity + theme settingsStore name in Settings → Store details; social profile links in Theme settings → Social accounts (these become the sameAs profile links).
Website + sitelinks searchStore name and domainSettings → Store details and Settings → Domains (primary domain).
Breadcrumb structured dataYour titles and navigation pathRename the product, collection or page — the trail and its markup follow automatically.
Social share image (Open Graph / Twitter)The page's featured image — or the variant's, on a variant linkProduct featured image, collection image or article image; the selected variant's own photo where it has one; store-wide fallback under Online Store → Preferences → Social sharing image.
Share price and availability (Facebook, Pinterest Rich Pins)The variant being sharedNothing to edit — read from the product's price and stock at the moment the page is fetched.
Product identifiers (GTIN)Each variant's Barcode fieldProduct edit screen → the variant → Barcode. Only genuine 8, 12, 13 or 14-digit GTINs are sent; anything else in the field is left out rather than sent wrong, so internal codes do no harm.
Canonical URLShopify, automaticallyNothing to edit — Shopify generates it from your primary domain.
Tip: after changing titles or descriptions, use Google's Rich Results Test or paste your URL into a social-share debugger to see exactly what crawlers now receive.

Sharing a specific variant

A product link can carry a variant — /products/harness?variant=123 — and posting one is worth doing when the campaign is about a particular colour or size: the shopper lands with it already selected, priced and ready to add, rather than on the default and having to find what they clicked.

Peregrine makes those links preview correctly. The share image follows the variant where that variant has its own photo, and the price and availability sent to Facebook and Pinterest are the variant's, so a share of the £40 size never advertises the £35 one.

To make that work, two tags deliberately disagree on a variant URL:

The trade-off is that likes and shares on a variant link count against that link rather than pooling on the product. For a campaign post about one colourway that's the right way round. Ordinary product links — anything without ?variant= — keep the clean address and pool their shares as before.

Do variant links hurt your SEO?

No, and it's worth knowing why, because it's a common worry. Google consolidates a parameter URL onto its canonical, so the ranking signals arrive at the product page rather than being split across variants. There's also nothing on the storefront linking to a variant URL for a crawler to follow — the parameter is written into the address bar as a shopper switches, which crawlers don't do. And Shopify's own robots.txt already keeps crawlers out of the genuinely expensive parameter space: sorted collections, and any URL combining two or more filters.

SEO settings & the kill switch

Theme settings → SEO controls the theme's entire SEO output. If you run an SEO app that outputs its own structured data or social tags, turn the theme's off — a master switch kills everything at once, or use the granular switches (each JSON-LD type, social sharing tags, utility-page noindex) to mix the theme's output with your app's. This avoids the classic duplicate-markup conflict where theme and app both describe the same product.

Page titles, meta descriptions, canonical URLs and the H1 guarantee are deliberately always on: SEO apps edit those values rather than rendering their own tags, so there's nothing to conflict with — and every page needs them.

HTML sitemap

Peregrine ships a built-in HTML sitemap — crawlable pages linking to everything on your store, so nothing is ever orphaned and internal link equity flows to your whole catalog. It stays current on its own as your store grows: no lists to maintain, no links to add by hand.

Rather than one enormous document, it works as a hub and its indexes. The hub lists your site pages and policies directly, then links out to a dedicated page for each large group. A store with thousands of products never has to render them all in one response.

TemplateWhat the page shows
html_sitemapThe hub — home, every site page, links to the indexes below, store policies
html_sitemap_collectionsEvery collection, 250 per page
html_sitemap_productsEvery product, 250 per page
html_sitemap_blogsEvery blog and article, grouped by blog

Setup:

  1. Admin → Online Store → Pages → Add page. Name it whatever you like — the page title becomes the heading. Anything you type in the body renders as an intro paragraph.
  2. In the page's Theme template dropdown, pick the template you want from the table above.
  3. Repeat for each index you want. The pages find each other automatically — as soon as a page exists on one of these templates, the hub links to it and that page links back. There is nothing to wire up.
  4. Link the hub in your footer: either add the page to your footer menu, or pick it in the footer section's Sitemap page setting to render a link beside the copyright on every page.

Create only what you need. The hub works on its own, and each group appears the moment its page exists.

Blogs are a special case worth knowing about. Shopify's template language can't list blogs or articles, so that one page reads your store's own sitemap.xml — the same file search engines use — in the browser. New posts appear there automatically with no input from you. The trade-off: those particular links are added after the page loads, so they won't show in "view source" (check the inspector instead). Every other group is rendered server-side.

Analytics & SEO tools: nothing to configure — your analytics (GA4, Clarity) load on these pages like any other, and crawlers (Google, Ahrefs, Semrush) discover them through the footer link. After a few days, check they appear in your page reports, and if you run site audits, you should see internal-links coverage improve — the "no orphaned pages" effect made visible.

To turn any of it off, switch that page back to the default template or delete it — the page is the switch. You can also hide individual groups from the hub in the section's settings.

Breadcrumbs

A breadcrumb section ships on product and collection templates (removable like any section) — Home → Collection → Product, with the matching BreadcrumbList markup. On product pages it prefers the collection the shopper navigated through.

Art-directed mobile images = mobile speed

Wherever you set a mobile image, Peregrine uses true <picture> art direction: the phone downloads only the mobile file, never the desktop one. Smaller transfers, better Largest Contentful Paint — and LCP is a ranking signal.

Image quality tuning

Theme settings → SEO → Images is Peregrine's built-in answer to image optimizer apps. Tune image sizes for speed serves smaller image files sized to how they actually display, and the Image quality selector sets how aggressive that is:

Two things you don't need a setting for, because they're automatic: Shopify's CDN already picks the best file format (WebP or AVIF) for every visitor's browser, and Peregrine lazy-loads every image below the fold while deliberately eager-loading the one image at the top of each page — lazy-loading your largest visible image is a classic speed mistake, and the theme won't make it.

The product page's zoom viewer always fetches the full-sharpness image regardless of this setting — zoom exists to show detail, so capping it would defeat the point.

Image focal points

When Peregrine crops an image to fit a shape — product cards, collection banners, blog cards, the gallery under a fixed ratio — it honours the focal point you set in Shopify admin (edit the image and drag the focus marker). Set the focal point on a tall pack shot to its label, and every cropped rendering keeps the label in frame. No focal point set means the standard centred crop.

Hygiene handled for you