Why Shopify stores keep making the same SEO mistakes
Shopify powers roughly 4.5 million live stores. It is the most popular hosted ecommerce platform in the English-speaking world. And yet, when you audit a random sample of Shopify stores (even stores doing six or seven figures in revenue), you find the same cluster of SEO problems, repeated store after store.
The reason is not negligence. It is that Shopify handles enough for most merchants to feel confident their SEO is fine, while quietly leaving dozens of issues unaddressed. The platform generates title tags automatically. It creates a sitemap. It has canonical tags baked into themes. None of that means your SEO is correct.
Here is what a typical Shopify audit surfaces:
- 78% of product pages have auto-generated title tags that exceed 60 characters or bury the primary keyword
- 65% of stores have missing or duplicate meta descriptions across collection and product pages
- 72% of stores have no og:image set on product pages, meaning social shares show broken or random previews
- 81% of stores have no Product schema markup, missing out on rich result eligibility in Google
- Core Web Vitals failures on mobile affect over 60% of Shopify stores due to unoptimised theme images and third-party app scripts
This checklist works through every layer: meta tags, technical SEO, content, and PageSpeed. Work through it top to bottom. Most fixes take under five minutes each.
Section 1: Meta tag checklist
Meta tags are the highest-leverage SEO fixes on any Shopify store. They directly control your Google search result appearance, your social share previews, and how crawlers understand your page intent.
1. Title tag: under 60 characters, keyword first
Shopify's default title tag format is Product Name | Shop Name. For most stores, the product name alone is already 50+ characters. Add the store name and you are at 70+, which Google truncates with an ellipsis. Lead with your primary keyword. Move the brand to the end or drop it entirely on product pages. Target 50-58 characters to guarantee full display in search results without truncation.
2. Meta description: unique, 150-160 characters, with a hook
Shopify does not generate meta descriptions by default. It leaves the field blank, which means Google writes its own using whatever text it finds on the page. That is usually the first sentence of your product description, which is rarely the most compelling copy. Write a custom meta description for every product and collection page. Include the primary keyword, a clear differentiator (price, material, free delivery), and a soft call to action. Keep it between 150-160 characters.
3. og:title: match your title tag or write a more social-friendly version
The og:title tag controls the bold headline shown when your page is shared on Facebook, LinkedIn, WhatsApp, or in Slack. Shopify's default themes populate this from your page title. If your title tag is keyword-optimised and under 60 characters, this is fine. If you want a slightly different (more social-friendly) headline (drop the brand, use a more conversational tone), set it explicitly in your theme's theme.liquid.
4. og:description: do not let platforms pull from body text
Without an explicit og:description, Facebook and LinkedIn will extract text from the page body. This is unpredictable and often produces ugly, truncated previews. Set og:description explicitly. Your meta description is an acceptable fallback, but a slightly longer, more social-optimised version performs better.
5. og:image: 1200 × 630px, absolute URL, HTTPS
This is the single highest-impact social SEO fix for most Shopify stores. The og:image tag must be an absolute HTTPS URL pointing to an image that is at least 1200 × 630px. Shopify serves product images via its CDN. Use the product's featured image with a size suffix: product.featured_image | img_url: '1200x630'. An image smaller than 600 × 315px will not render on Facebook. An image without an HTTPS URL will be silently ignored.
6. twitter:card: set to summary_large_image for product pages
Set twitter:card to summary_large_image on all product and collection pages. This renders a full-width product image above the link title on X (formerly Twitter), which drives dramatically higher click-through rates than the compact summary format. Most Shopify themes include a twitter:card tag but default it to summary. Check your theme.liquid and update it.
7. twitter:image: explicitly set, not inherited from og:image
Some social scrapers do not fall back from og:image to twitter:image. Set both explicitly. Use the same image URL. Two lines in your Liquid template, and you guarantee correct rendering on both Twitter/X and Open Graph platforms.
8. og:type: product on product pages, website on homepage
Set og:type to product on product pages. This unlocks richer Facebook preview formats for ecommerce. Use website on your homepage and article on blog posts. Leaving og:type unset defaults to website, which means you lose the product-specific Open Graph fields.
9. Homepage meta tags: brand-led, not product-led
Your homepage title tag should prioritise your brand and primary category keyword. Format: [Brand]: [What You Sell] | [Key Differentiator]. Keep it under 60 characters. The meta description should convey your store's value proposition in 150-160 characters, meaning what you sell, why you are different, and a soft call to action. Set a homepage og:image that represents your brand broadly, not a single product.
10. Collection page meta tags: write them, do not skip them
Collection pages rank for category-level keywords: “men's running shoes”, “handmade ceramic mugs”, “organic skincare”. These are high-intent queries with strong commercial value. Yet most Shopify stores leave collection meta descriptions blank. Write a unique, keyword-rich meta description for every collection that drives meaningful organic traffic. Mention product count, price range, or a standout feature.
Section 2: Technical SEO checklist
Technical SEO controls how Google crawls, indexes, and interprets your Shopify store. Get this wrong and even perfect meta tags will not save your rankings.
1. Canonical tags: Shopify creates duplicate URLs by default
Shopify products can appear at two different URLs: /products/product-name and /collections/collection-name/products/product-name. Both are live, indexable, and identical in content. Without a canonical tag on the collection-scoped URL pointing to the clean /products/ URL, you are serving Google two copies of every product. Most modern Shopify themes handle this correctly, but verify it. Open a product via a collection URL, view source, and confirm the canonical points to the /products/ path.
2. robots.txt: verify it is not blocking important pages
Shopify auto-generates a robots.txt that blocks internal search pages, checkout, cart, and account pages. This is correct behaviour. However, if you have used a Shopify app that injects content at a custom path, or if you have modified your robots.txt via the theme editor, you may be accidentally blocking product or collection pages. Fetch your yourdomain.com/robots.txt and scan every disallow rule. Also check Google Search Console → URL Inspection for any “blocked by robots.txt” errors on key pages.
3. XML sitemap: submitted and verified in Google Search Console
Shopify generates your sitemap at yourdomain.com/sitemap.xml automatically. It includes products, collections, pages, and blog posts. What it does not do is submit itself. Log into Google Search Console, go to Sitemaps, and submit your sitemap URL. Verify the indexed URL count is close to your actual page count. If Google shows significantly fewer indexed pages than you expect, you have a crawl or canonicalization problem worth investigating.
4. Structured data (schema markup): Product schema on every product page
Product schema tells Google the exact price, availability, SKU, and aggregate rating of your product, enabling rich results in search (price shown directly in the SERP, star ratings, availability badges). Shopify's default themes do not always output complete Product schema. Use Google's Rich Results Test on your top product URL to verify. If schema is missing or incomplete, install a schema app or add it manually to your theme's product.json template via a <script type="application/ld+json"> block.
5. 404 errors: fix broken internal links and redirected pages
Every time you delete a product, rename a collection handle, or restructure your URL hierarchy without setting up a redirect, you create a 404. 404 pages waste crawl budget, break backlinks, and confuse users. In Shopify, go to Online Store → Navigation → URL Redirects and set up 301 redirects for every deleted or moved page. Also pull a crawl report from Google Search Console → Pages → Not Found (404) at least once a month.
6. HTTPS: confirm no mixed content warnings
Shopify handles HTTPS automatically via its managed SSL certificates. What it does not handle is mixed content, where a secure page loads an insecure HTTP resource (typically an image or script loaded from an external URL). Mixed content warnings in the browser console can suppress security indicators and, in some cases, cause browsers to block resources. Run your homepage, a product page, and a collection page through a tool like WhyNoPadlock to check for mixed content issues.
7. Hreflang: essential if you have multiple regional storefronts
If you run separate Shopify stores for different countries or languages (e.g. .com for the US and .co.uk for the UK), you need hreflang tags to tell Google which version to serve to which audience. Without them, Google may choose the wrong regional version for international search results or consolidate your rankings onto a single storefront. Shopify does not handle hreflang automatically. It must be added to your theme.
8. Indexation audit: confirm no accidental noindex tags
A common Shopify mistake: a developer adds <meta name="robots" content="noindex"> to prevent indexation during development, then forgets to remove it before launch. Or a theme update reintroduces it. Run a site: search on Google for your domain. If you expect 500 pages indexed and see 50, you have a noindex problem. Verify the tag is absent on your top 10 pages by viewing page source and searching for “noindex”.
Section 3: Content and page checklist
On-page content signals reinforce your meta tag work. These are the elements Google uses to understand topical relevance beyond what is in your <head>.
1. H1 tag: one per page, matches your target keyword
Every page should have exactly one <h1> tag, and it should include or closely match your primary keyword. On Shopify product pages, the H1 is typically set by the product title, so your product name is effectively your H1. Make sure product names are keyword-relevant and not just internal SKU codes. On collection pages, the collection title is the H1. On the homepage, set it explicitly in your theme to something descriptive.
2. Image alt text: descriptive, keyword-aware, not stuffed
Shopify does not auto-generate alt text. Every image uploaded to your store defaults to an empty alt attribute unless you fill it in manually. Alt text serves two purposes: accessibility (screen readers) and SEO (Google Image Search). Write a brief, accurate description of what the image shows. Include the product name and a relevant keyword where natural. Do not keyword-stuff. A product image of a navy canvas tote bag should have alt text like “Navy canvas tote bag with leather handles”, not “buy tote bag cheap tote bag best tote bag”.
3. URL structure: clean, descriptive handles with no stop words
Shopify auto-generates URL handles from your product and collection titles. A product titled “The Ultimate Organic Cotton Premium Heavyweight T-Shirt in Navy Blue” becomes the handle the-ultimate-organic-cotton-premium-heavyweight-t-shirt-in-navy-blue: a 70-character URL that buries your keyword. Manually set handles to the shortest, most keyword-focused version: organic-cotton-t-shirt-navy. Do not change handles on live products that already have backlinks without setting up a 301 redirect.
4. Product descriptions: unique, keyword-rich, written for humans
Thin or duplicated product descriptions are a significant ranking problem for Shopify stores that import products from a supplier feed. If every store selling the same product has the same manufacturer description, none of them stand out to Google. Rewrite your top 20 most-visited product pages with unique descriptions that address the customer's question: materials, sizing, use case, differentiating features. 400-600 words is a strong target for competitive product pages.
5. Internal linking: connect products, collections, and content
Internal links pass page authority and help Google understand your site structure. In Shopify, the most common internal linking opportunities are: linking from blog posts to relevant product and collection pages, linking from product descriptions to related products, and linking from collection pages to sub-collection pages. Review your top 10 traffic-generating blog posts. If none of them link to a product or collection page, you are leaving commercial value on the table.
6. Heading hierarchy: logical H2/H3 structure throughout
After your H1, use H2 and H3 tags to structure your page content hierarchically. On product pages this means using H2 for major sections (Features, Sizing, Reviews) and H3 for subsections. On collection pages, use H2 for any editorial copy below the product grid. Google uses heading structure to understand what a page covers. A page with no subheadings and 800 words of body text is harder to parse than one with clearly delineated sections.
Section 4: PageSpeed quick wins
PageSpeed and Core Web Vitals are confirmed Google ranking factors. Shopify stores frequently fail Core Web Vitals on mobile, not because the platform is slow, but because of accumulated theme bloat and unoptimised media. Here are the fastest wins.
1. Audit and remove unused Shopify apps
Every Shopify app that injects JavaScript into your storefront adds page weight. Many apps continue loading scripts even after you uninstall them. They leave remnant code in your theme files. Go to your theme code and search for any script tags referencing apps you no longer use. Remove them. In a study of 200 Shopify stores, the average store had 4.3 dead app scripts still loading on every page, adding an average of 340ms to page load time.
2. Compress and convert images to WebP
Images are the largest contributor to Shopify page weight. Shopify's CDN now serves WebP automatically when the browser supports it, but only if you have uploaded high-quality source images and are using Shopify's image transformation parameters. Use {{ image | image_url: width: 800, format: 'webp' }} in your Liquid templates. For hero images, upload a source file no larger than 3000px wide and let the CDN handle resizing. Avoid uploading raw camera files (8-15MB) directly to your theme assets.
3. Defer non-critical JavaScript
Scripts that are not needed for the initial page render (analytics, chat widgets, review widgets, social sharing buttons) should load after the main content. Add defer or async attributes to script tags where possible. For apps injected via Shopify's Script Tags API, check if the app provides a “load after page ready” option in its settings. Shifting even 200ms of JavaScript load time post-render can move your Largest Contentful Paint (LCP) score significantly.
4. Lazy-load below-the-fold images
Use the loading="lazy" attribute on product grid images and any image that appears below the fold. Shopify 2.0 themes typically implement this by default. Older themes often do not. The hero image and the first product image in your grid should never be lazy-loaded. They need to render immediately for a good LCP score.
5. Enable Shopify's built-in performance features
Shopify 2.0 themes include several built-in performance features: section rendering API, lazy-loading sections on scroll, and deferred loading of non-critical CSS. Make sure your theme is on a Shopify 2.0 architecture. If you are running a legacy theme, the upgrade alone can improve your PageSpeed score by 15-25 points. Also enable Shopify's image CDN compression in your theme settings. It reduces image payload by 25-40% automatically.
6. Check your Largest Contentful Paint element
Run your homepage and a top product page through Google PageSpeed Insights. It will tell you exactly what your LCP element is, usually a hero image or a large above-the-fold text block. For image LCP elements, the two fastest wins are: preload the image with <link rel="preload" as="image"> in your theme's head, and make sure the image is served from Shopify's CDN with correct sizing parameters rather than being loaded at full resolution and scaled down in CSS.
Complete Shopify SEO checklist: scan this before you launch
Work through every item below. Tick them off as you go. The entire checklist can be completed in under 2 hours for a typical Shopify store.
Meta Tags
- Title tags are under 60 characters and lead with the primary keyword
- Meta descriptions are written, unique, and 150-160 characters on all key pages
- og:title is set, matches title tag or uses a more social-friendly version
- og:description is explicitly set on all product and collection pages
- og:image is set, 1200 × 630px, absolute HTTPS URL, on all product pages
- twitter:card is set to summary_large_image on product and collection pages
- twitter:image is explicitly set (not relying solely on og:image fallback)
- og:type is set to product on product pages and website on homepage
- Homepage has a unique, brand-led title and meta description
- All collection pages have unique, keyword-rich meta descriptions
Technical SEO
- Canonical tags on collection-scoped product URLs point to /products/ canonical
- robots.txt reviewed, no important pages blocked
- XML sitemap submitted to Google Search Console and indexed count is accurate
- Product schema (with price, availability, reviews) verified via Rich Results Test
- No 404 errors on key pages, 301 redirects set for deleted/moved pages
- No mixed content warnings on HTTPS pages
- Hreflang tags set if running multiple regional storefronts
- No accidental noindex tags on product, collection, or homepage
Content and Pages
- Each page has exactly one H1 tag that includes or matches the primary keyword
- All product and collection images have descriptive, keyword-aware alt text
- URL handles are short, keyword-focused, and free of stop words
- Top 20 product pages have unique descriptions (not copied from supplier feeds)
- Top 10 blog posts include internal links to relevant product/collection pages
- Pages use logical H2/H3 heading hierarchy throughout body content
PageSpeed
- Unused Shopify app scripts removed from theme files
- Product and hero images compressed and served in WebP format via Shopify CDN
- Non-critical JavaScript (analytics, chat, reviews) deferred or async loaded
- Below-the-fold images use loading="lazy" attribute
- Theme is on Shopify 2.0 architecture with built-in performance features enabled
- LCP element identified via PageSpeed Insights and optimised with preload or CDN sizing