All articles

shopify

Shopify H1 best practices: copy, length, and SEO impact in 2026

Shopify H1 best practices for 2026: one H1 per page, the 40-70 char sweet spot, product vs homepage H1s, JSON-LD matching, and the Dawn/Sense/Refresh defaults.

The Pulsar team9 min read
A Shopify product page with the H1 highlighted in a browser inspector, showing the heading hierarchy underneath.

The H1 is the most over-discussed and under-tested element on a Shopify page. Most stores ship one of three failure modes: the homepage that uses the brand name as its H1, the product page where the H1 doesn't match the product title in JSON-LD, or the section template that quietly renders two H1s because the merchant duplicated a Rich Text block. This guide is the technical and copy-side reference we wish existed — what to put in the H1, how long it should be, how Dawn/Sense/Refresh handle it by default, and the SEO knock-on effects of getting any of it wrong.

TL;DR

  • One H1 per page. Always. Anything else confuses both screen readers and search crawlers.
  • Product page H1 = product title. Don't get clever. Match it byte-for-byte with Product.name in your JSON-LD.
  • Homepage H1 should be a value proposition, not your brand name. Your <title> and logo already carry the brand.
  • Length sweet spot is 40-70 characters for organic ranking pages, 20-40 for above-the-fold conversion headlines.
  • H1 and meta title have different jobs — the meta title sells the click in the SERP; the H1 confirms the promise once the visitor lands.
  • Don't restyle to fake a heading. A <p> styled to look big is invisible to SEO and screen readers.

The one-H1-per-page rule, and why Shopify themes break it

HTML5 technically allows multiple H1s if you nest them inside <article> or <section> landmarks. In practice, Google still treats the page as a single document and reads them all. Screen readers do too. So the working rule for any ecommerce page is: one H1, full stop.

The most common way Shopify stores break this is by accident. A merchant drops a Rich Text section onto the homepage, sets the heading size to H1 in the dropdown, and now the page has two — one from the hero section and one from the Rich Text. Dawn's image-banner.liquid and rich-text.liquid both let you pick the heading tag, so it's on you to keep count.

Page typeExpected H1Where it lives in Dawn
HomepageValue prop / hero headlinesections/image-banner.liquid
Product pageProduct titlesections/main-product.liquid
Collection pageCollection titlesections/main-collection-banner.liquid
Blog postArticle titlesections/main-article.liquid
Cart / CheckoutPage name (Your cart)sections/main-cart-header.liquid

Product page H1: it's the product title, and it's not negotiable

On a product detail page (PDP), the H1 must be the product title. This isn't a stylistic choice — it's structural. The Product.name field in your JSON-LD schema, the <title> tag, the H1, the og:title meta, and the breadcrumb leaf should all match. When they drift, Google flags the page as ambiguous and your rich result eligibility degrades.

sections/main-product.liquid
{%- comment -%} Dawn's default product H1 wiring {%- endcomment -%}
<h1 class="product__title">
  {{ product.title | escape }}
</h1>

{%- comment -%} The JSON-LD must match exactly {%- endcomment -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": {{ product.title | json }},
  "description": {{ product.description | strip_html | json }}
}
</script>

Two things to watch for. First, if you've customized your PDP to show a marketing tagline above the product title and bumped it to <h1>, you've broken the match. Second, if your product titles are short and generic (The T-Shirt), your H1 will rank for nothing. The fix is at the data level — improve the product title in Shopify Admin — not in Liquid.

Homepage H1: the brand-name trap

About half of Shopify homepages we audit have their brand name as the H1 — usually because the hero section's heading field was left blank or the merchant typed the brand in there reflexively. This is the single most common SEO own-goal in the platform.

Your brand name is already in the <title>, the logo alt, the favicon, and the schema Organization markup. Burning the H1 on it is throwing away the most valuable on-page slot for what visitors actually came to find: what you sell and why they should care.

Bad homepage H1Better homepage H1
AcmePlant-based skincare for sensitive skin
Welcome to AcmeHand-poured candles, made in Brooklyn
Acme — Official StoreThe desk that grows with your setup
HomeSustainable basics, shipped in 48 hours

If you're stuck on what to write, this is a copy problem, not a code problem. We covered the full framework in our headline copywriting for Shopify guide — five-second test, audience-first phrasing, and the value/curiosity/proof triangle.

Three Shopify homepages side by side comparing a brand-name H1 against two value-proposition H1s.
Same brand, three H1 strategies. The middle and right versions both rank for actual product queries; the left ranks only for brand searches that would have found it anyway.

Collection page H1: title plus context

Collection H1s are the easiest win in Shopify SEO and the most often ignored. The default in Dawn renders collection.title — which means Best Sellers or New Arrivals becomes your H1 on what is functionally a category landing page. Generic, and useless for ranking.

If the collection is a real category (not a merchandising bucket like Best Sellers), edit the collection title in Shopify Admin to something a customer would actually search. Women's running shoes ranks. Sneakers doesn't. You can keep the navigation menu label short while the H1 / title field carries the longer phrase — Shopify lets you set them independently via the Navigation menu's custom label.

sections/main-collection-banner.liquid
{%- comment -%}
  Default Dawn collection H1.
  Note: settings.show_collection_description controls whether a
  paragraph appears below — turn it on and write a 40-60 word
  intro to give the H1 keyword context.
{%- endcomment -%}
<h1 class="collection-hero__title">
  {{ collection.title | escape }}
</h1>

{%- if section.settings.show_collection_description and collection.description != blank -%}
  <div class="collection-hero__description rte">
    {{ collection.description }}
  </div>
{%- endif -%}

The 40-70 character sweet spot

There's no Google-enforced limit on H1 length, but visual and behavioural data converges on 40-70 characters for organic landing pages. Below 40 and the H1 underperforms in search interpretation; above 70 and it wraps to three lines on mobile and gets visually dismissed. For above-the-fold hero H1s where conversion matters more than ranking, 20-40 is the better band.

Page intentTarget char countWhy
Above-the-fold homepage hero20-40Glanceability, mobile fold
Product page (PDP)30-60Product names should be precise, not long
Collection / category page40-70Long-tail keyword room
Blog article40-70Long-tail keyword room + SERP CTR

Counting characters in your head is a waste of time. Run document.querySelector('h1').textContent.trim().length in the console once per template — homepage, a representative PDP, a representative collection, a blog post — and you've audited 90% of your store.

Keyword placement: front-load, don't stuff

The single keyword placement rule that matters: put the primary search term in the first half of the H1. Eye-tracking studies and crawler weighting both bias toward the left edge. Women's running shoes for flat feet outperforms Comfortable footwear designed for women with flat feet who run.

  • Lead with the noun, not the adjective. Running shoes ranks; Comfortable, lightweight shoes for runners doesn't.
  • One primary keyword per H1. Secondary terms belong in H2s and body copy.
  • Don't keyword-stuff with separators. Shoes | Sneakers | Trainers | Running Shoes reads as spam to both humans and crawlers.
  • Match search intent, not search volume. A high-volume term that mismatches the page tanks your bounce rate, which Google notices.

H1 vs meta title: same page, different jobs

These two get conflated constantly. They're not the same field, they're not the same audience, and they don't have the same job. Most Shopify themes will fall back to the H1 for the meta title if you leave it blank — but you should never leave it blank.

FieldMeta `<title>`H1 `<h1>`
Lives in<head><body>
Seen bySearch result page, browser tabVisitor on the page
JobSell the clickConfirm the promise
Length50-60 chars40-70 chars (organic) / 20-40 (hero)
Brand?Yes — append brandNo — already implied
Sales-y?Yes — use CTAsOptional — clarity beats sell

Example: a meta title of Plant-Based Skincare for Sensitive Skin (Free Returns) - Acme pairs with an H1 of Plant-based skincare for sensitive skin. Same primary keyword, but the meta sells the click with the parenthetical incentive and the brand suffix; the H1 keeps it clean because the visitor has already arrived.

JSON-LD: where mismatches cost you rich results

Shopify auto-generates JSON-LD for product pages via product | json_ld, and most themes inject it. The name field in that schema must match your H1 character-for-character. Drift here is the leading cause of products dropping out of rich result eligibility — the merchant page-stuffs the H1 with (Free Shipping) while the JSON-LD stays clean, and Google flags it as ambiguous.

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Cedarwood Soy Candle - 8oz",
  "image": ["https://cdn.shopify.com/.../candle.jpg"],
  "description": "A hand-poured soy candle...",
  "offers": {
    "@type": "Offer",
    "price": "24.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

If the H1 reads Cedarwood Soy Candle - 8oz and the JSON-LD name reads Cedarwood Soy Candle, you have a problem. Test every template once with Google's Rich Results Test — it'll flag the mismatch as a warning.

Accessibility: how screen readers pronounce your H1

The H1 is the first heading a screen reader announces after the page landmarks. NVDA, JAWS, and VoiceOver all read it verbatim — including punctuation, separators, and any clever Unicode characters. A few practical rules:

  • Avoid pipes and bullets (|, ) in the H1 — VoiceOver reads them as vertical line and bullet. Use an em-dash or comma.
  • Spell out ampersands if your brand voice can stand it — & is read as and but pauses awkwardly in compound nouns.
  • Don't put critical words inside `aria-hidden` spans, even for styling. The screen reader skips them entirely.
  • Styling never replaces structure. A <p> with font-size: 2.5rem looks like a heading, ranks like a paragraph, and reads like a paragraph to screen readers.

What Dawn, Sense, and Refresh do by default

All three of Shopify's first-party themes follow the same conventions but with different defaults. Useful to know before you start customizing.

ThemeHomepage H1 defaultPDP H1 defaultHeading tag pickable in editor?Risk of dup H1s
DawnFirst image-banner headingproduct.title (always H1)Yes (H1-H4)High
SenseFirst image-banner headingproduct.title (always H1)Yes (H1-H4)High
RefreshFirst image-banner headingproduct.title (always H1)Yes (H1-H6)Medium

All three themes will happily render two H1s if a merchant flips the heading dropdown on a second section. None of them surface a warning. This is why the 10-second document.querySelectorAll('h1') audit is non-optional.

Above-the-fold conversion vs organic ranking

A homepage hero H1 and an organic-traffic landing page H1 have different priorities. The hero is read in two seconds by a visitor who already clicked — it should be short, evocative, and conversion-focused. The collection or blog H1 is the first thing a Google visitor sees in the SERP-to-page transition — it should match the search query and reassure the visitor they're in the right place.

If you're optimizing the hero specifically, we have a conversion checklist for above-the-fold Shopify content that covers H1, sub-headline, CTA, and trust signals as a system. The H1 is one of five elements that have to work together, not in isolation.

Good vs bad H1s, by page type

PageBad H1Good H1
HomepageWelcomeHand-poured candles, made in Brooklyn
HomepageAcme Co.The desk that grows with your workspace
PDPBuy Now!Cedarwood Soy Candle — 8oz
PDPT-ShirtHeavyweight cotton crewneck, garment-dyed
CollectionProductsWomen's running shoes for flat feet
CollectionBest SellersTop-rated kitchen knives under $100
Blog postOur latest blog postHow we cut shipping time in half (without losing margin)
Chrome DevTools console showing a one-liner that counts and prints every H1 on a Shopify page.
The 10-second audit. Run this on every template — anything other than `1` is a bug worth fixing today.

A 5-minute H1 audit for your store

  1. Open your homepage. Run document.querySelectorAll('h1').length in the console. Confirm 1.
  2. Read the actual H1 text. If it's your brand name, Welcome, or Home — rewrite it as a value proposition.
  3. Open a representative PDP. Confirm the H1 matches product.title exactly. Check JSON-LD name matches.
  4. Open a representative collection page. If the title is a marketing bucket (Best Sellers), consider whether it could be a real category instead.
  5. Open a blog post. Confirm the article title is H1 and the page chrome (like sidebar widgets) isn't using H1.
  6. Run a screen reader pass with VoiceOver (Cmd+F5 on Mac) on the homepage. Listen to how the H1 reads aloud. Awkward? Rewrite.

About the author

The Pulsar team

Shopify text styling

Pulsar is the easiest way to stylize headlines in your Shopify store — colors, gradients, animated highlights and circles, no theme code required.

Install Pulsar — Free