Przejdź do treści
ARDURA Lab
ARDURA Lab
"},{"@type":"HowToStep","position":4,"name":"4. Mobile-friendly default","text":"Shopify themes są mobile-first od 2020. Większość themes spełnia Core Web Vitals (przy nie-overcustomized state)."},{"@type":"HowToStep","position":5,"name":"1. URL structure","text":"Shopify wymusza prefiksy: - /products/handle — produkty - /collections/handle — kolekcje - /blogs/blog/post — blog posty - /pages/handle — pages Nie możesz mieć clean URLs typu /sneakers-nike-air-max — musisz mieć /products/sneakers-nike-air-max. Mitigation: SEO-friendly handles. Auto-generated handle bywa ze spacjami → my-product-name. Custom handle przez admin."},{"@type":"HowToStep","position":6,"name":"2. Duplicate content","text":"Shopify generuje wiele URL-i dla tego samego produktu: - /products/x (canonical) - /products/x?variant=12345 (variant) - /products/x?ref=... (referrer) - /collections/category/products/x (kolekcja + produkt) Fix: Shopify ma auto-canonical na primary URL. Sprawdź w view-source: że canonical wskazuje na /products/x (bez parametrów)."},{"@type":"HowToStep","position":7,"name":"3. Robots.txt","text":"Domyślny Shopify robots.txt jest ok, ale ogranicza: - Disallow: /search - Disallow: /cart - Disallow: /checkout - Disallow: /account Custom robots: edycja robots.txt.liquid w theme: liquid {% for group in robots.defaultgroups %} {{- group.useragent }} {%- for rule in group.rules -%} {{ rule }} {%- endfor -%} {%- if group.useragent.value == '' -%} {{ 'Disallow: /search/' | strip }} {%- endif -%} {%- if group.sitemap != blank -%} {{ group.sitemap }} {%- endif -%} {% endfor %}"},{"@type":"HowToStep","position":8,"name":"4. Blog limitations","text":"Shopify Basic blog ma ograniczenia: - Tylko 1 author per post (nie multi-author) - Limited tags structure - No category hierarchy - No native FAQ schema Workaround: custom HTML w blog post body. Albo migrate blog na zewnętrzny WordPress / Webflow z tej samej domeny."},{"@type":"HowToStep","position":9,"name":"5. Page speed","text":"Shopify CDN jest szybki, ale apps mogą zabić speed: - Każda app dodaje JS bloating - Reviews apps często ładują 500KB+ JS - Loyalty apps, popups, chat — wszystko spowalnia Audyt: PageSpeed Insights → mobile. Jeśli LCP > 2.5s, usuń niektóre apps."},{"@type":"HowToStep","position":10,"name":"Title tag","text":"Format: Product Name - Brand | Category/Use liquid {{ product.title }} - {{ shop.name }} | {{ collection.title }} Max 60 znaków. Unikaj duplikacji między produktami."},{"@type":"HowToStep","position":11,"name":"Meta description","text":"liquid Lepiej: custom meta description per produkt (admin → SEO section)."},{"@type":"HowToStep","position":12,"name":"H1","text":"H1 = product name (jeden per page). Sprawdź theme — niektóre używają H2/H3 zamiast H1."},{"@type":"HowToStep","position":13,"name":"Alt text","text":"liquid {% for image in product.images %} \"{{ {% endfor %} Zaleca się custom alt dla każdego obrazu (admin) zamiast fallback do product.title."},{"@type":"HowToStep","position":14,"name":"Description","text":"- 200-500 słów - Keyword w pierwszym 100 słów - Bullet points dla features - USPs (czemu klient ma kupić) - Schema-friendly: krótkie zdania, FAQ na dole"},{"@type":"HowToStep","position":15,"name":"Schema enhancements","text":"Standardowy Product schema wystarcza, ale dodaj: liquid {% if product.metafields.reviews.averagerating %} \"aggregateRating\": { \"@type\": \"AggregateRating\", \"ratingValue\": \"{{ product.metafields.reviews.averagerating }}\", \"reviewCount\": \"{{ product.metafields.reviews.reviewcount }}\" } {% endif %} Plus FAQ schema dla często zadawanych pytań o produkt."},{"@type":"HowToStep","position":16,"name":"URL handle","text":"Krótkie, descriptive: /collections/sneakers-nike zamiast /collections/buty-sportowe-marka-nike-2026."},{"@type":"HowToStep","position":17,"name":"Description content","text":"Każda kolekcja powinna mieć 200-500 słów opisu (nie pusty placeholder). To buduje topical authority i daje keywords ranking. liquid
{{ collection.description }}
"},{"@type":"HowToStep","position":18,"name":"Filters i fragmenty","text":"Shopify dodaje filter parameters (?filter.v.price.gte=100). Te URL-e: - Mają canonical do collection (bez parametrów) - Są noindex domyślnie Sprawdź to nie jest broken."},{"@type":"HowToStep","position":19,"name":"Pagination","text":"/collections/x?page=2, ?page=3 — domyślnie indexable. Decyzja: - Indexable — każda strona paginacji rankuje, więcej widoczności (recommended dla long collections) - Noindex — tylko strona 1, mniej duplicates ryzyka W theme.liquid: liquid {% if paginate.currentpage > 1 %} {% endif %}"},{"@type":"HowToStep","position":20,"name":"Post title format","text":"Topic | Year | Brand Blog lub Topic - Brand Max 60 znaków."},{"@type":"HowToStep","position":21,"name":"Content depth","text":"Shopify blog często serwuje thin content (200 słów). To anti-pattern. Cel: 1500+ słów per post, structured z H2/H3."},{"@type":"HowToStep","position":22,"name":"Related products w blog","text":"liquid {% for product in collections.featured.products limit: 3 %} {% endfor %} Internal linking blog → product = transfer autorytetu na product pages."},{"@type":"HowToStep","position":23,"name":"FAQ schema na blog post","text":"Wymaga custom Liquid: liquid {% if blog.metafields.seo.faq %} {% endif %}"}],"publisher":{"@type":"Organization","name":"ARDURA Lab","url":"https://arduralab.com"}}
·6 min

SEO dla Shopify — kompletny przewodnik 2026

MG
Marcin Godula

CEO & Founder, ARDURA Lab

Specjalista SEO, GEO i web development z ponad 15-letnim doświadczeniem. Pomaga firmom B2B budować widoczność w wyszukiwarkach klasycznych i AI.

Shopify ma solidne SEO fundamenty out-of-the-box, ale wymaga tunningu na poziomie zaawansowanym. URL structure wymuszona, ograniczona kontrola robots.txt, duplicate content z parametrów. Z drugiej strony: szybki hosting, automatyczne schema.org, mobile-first. Ten przewodnik pokazuje, jak wycisnąć maksimum SEO z Shopify w 2026.

TL;DR — SEO dla Shopify

ElementStatus w Shopify
Sitemap.xmlAuto-generated ✅
Schema ProductAuto ✅
Mobile-friendlyDefault ✅
Speed (CWV)Solid (zależy od theme)
URL controlLimited (prefix /products/, /collections/)
Robots.txtRobots.txt.liquid edit (theme)
BloggingBasic blog (limited features)
Custom redirectsAdmin → Online Store → Navigation → URL Redirects

Shopify SEO — co masz za darmo

1. Sitemap.xml

Shopify automatycznie generuje:

  • /sitemap.xml (główny)
  • /sitemap_products_1.xml
  • /sitemap_collections_1.xml
  • /sitemap_pages_1.xml
  • /sitemap_blogs_1.xml

Submit w GSC (Property → Sitemaps → submit https://yourstore.myshopify.com/sitemap.xml).

2. Schema Product

Shopify automatycznie generuje schema.org Product dla każdej produktu:

  • name, description, image
  • offers z ceną, walutą, availability
  • brand, sku

Sprawdź w Rich Results Test na URL produktu.

3. Schema Organization

Generated dla home page. Edytuj w theme theme.liquid:

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "name": "{{ shop.name }}",
    "url": "{{ shop.url }}",
    "logo": "{{ 'logo.png' | asset_url }}",
    "sameAs": [
      "https://facebook.com/yourshop",
      "https://instagram.com/yourshop"
    ]
  }
</script>

4. Mobile-friendly default

Shopify themes są mobile-first od 2020. Większość themes spełnia Core Web Vitals (przy nie-overcustomized state).

Shopify SEO — co wymaga pracy

1. URL structure

Shopify wymusza prefiksy:

  • /products/[handle] — produkty
  • /collections/[handle] — kolekcje
  • /blogs/[blog]/[post] — blog posty
  • /pages/[handle] — pages

Nie możesz mieć clean URLs typu /sneakers-nike-air-max — musisz mieć /products/sneakers-nike-air-max.

Mitigation: SEO-friendly handles. Auto-generated handle bywa ze spacjami → my-product-name. Custom handle przez admin.

2. Duplicate content

Shopify generuje wiele URL-i dla tego samego produktu:

  • /products/x (canonical)
  • /products/x?variant=12345 (variant)
  • /products/x?ref=... (referrer)
  • /collections/category/products/x (kolekcja + produkt)

Fix: Shopify ma auto-canonical na primary URL. Sprawdź w view-source: że canonical wskazuje na /products/x (bez parametrów).

3. Robots.txt

Domyślny Shopify robots.txt jest ok, ale ogranicza:

  • Disallow: /search
  • Disallow: /cart
  • Disallow: /checkout
  • Disallow: /account

Custom robots: edycja robots.txt.liquid w theme:

{% for group in robots.default_groups %}
  {{- group.user_agent }}
  {%- for rule in group.rules -%}
    {{ rule }}
  {%- endfor -%}
  
  {%- if group.user_agent.value == '*' -%}
    {{ 'Disallow: /search/' | strip }}
  {%- endif -%}
  {%- if group.sitemap != blank -%}
    {{ group.sitemap }}
  {%- endif -%}
{% endfor %}

4. Blog limitations

Shopify Basic blog ma ograniczenia:

  • Tylko 1 author per post (nie multi-author)
  • Limited tags structure
  • No category hierarchy
  • No native FAQ schema

Workaround: custom HTML w blog post body. Albo migrate blog na zewnętrzny WordPress / Webflow z tej samej domeny.

5. Page speed

Shopify CDN jest szybki, ale apps mogą zabić speed:

  • Każda app dodaje JS bloating
  • Reviews apps często ładują 500KB+ JS
  • Loyalty apps, popups, chat — wszystko spowalnia

Audyt: PageSpeed Insights → mobile. Jeśli LCP > 2.5s, usuń niektóre apps.

Optymalizacja produktów

Title tag

Format: [Product Name] - [Brand] | [Category/Use]

<title>{{ product.title }} - {{ shop.name }} | {{ collection.title }}</title>

Max 60 znaków. Unikaj duplikacji między produktami.

Meta description

<meta name="description" content="{{ product.description | strip_html | truncate: 160 }}" />

Lepiej: custom meta description per produkt (admin → SEO section).

H1

H1 = product name (jeden per page). Sprawdź theme — niektóre używają H2/H3 zamiast H1.

Alt text

{% for image in product.images %}
  <img src="{{ image | img_url: '800x' }}" alt="{{ image.alt | default: product.title }}" />
{% endfor %}

Zaleca się custom alt dla każdego obrazu (admin) zamiast fallback do product.title.

Description

  • 200-500 słów
  • Keyword w pierwszym 100 słów
  • Bullet points dla features
  • USPs (czemu klient ma kupić)
  • Schema-friendly: krótkie zdania, FAQ na dole

Schema enhancements

Standardowy Product schema wystarcza, ale dodaj:

{% if product.metafields.reviews.average_rating %}
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "{{ product.metafields.reviews.average_rating }}",
    "reviewCount": "{{ product.metafields.reviews.review_count }}"
  }
{% endif %}

Plus FAQ schema dla często zadawanych pytań o produkt.

Optymalizacja kolekcji

URL handle

Krótkie, descriptive: /collections/sneakers-nike zamiast /collections/buty-sportowe-marka-nike-2026.

Description content

Każda kolekcja powinna mieć 200-500 słów opisu (nie pusty placeholder). To buduje topical authority i daje keywords ranking.

<div class="collection-description">
  {{ collection.description }}
</div>

Filters i fragmenty

Shopify dodaje filter parameters (?filter.v.price.gte=100). Te URL-e:

  • Mają canonical do collection (bez parametrów)
  • Są noindex domyślnie

Sprawdź to nie jest broken.

Pagination

/collections/x?page=2, ?page=3 — domyślnie indexable. Decyzja:

  • Indexable — każda strona paginacji rankuje, więcej widoczności (recommended dla long collections)
  • Noindex — tylko strona 1, mniej duplicates ryzyka

W theme.liquid:

{% if paginate.current_page > 1 %}
  <meta name="robots" content="noindex, follow" />
{% endif %}

Optymalizacja blog

Post title format

[Topic] | [Year] | [Brand Blog] lub [Topic] - [Brand]

Max 60 znaków.

Content depth

Shopify blog często serwuje thin content (200 słów). To anti-pattern. Cel: 1500+ słów per post, structured z H2/H3.

Related products w blog

{% for product in collections.featured.products limit: 3 %}
  <div class="related-product">
    <a href="{{ product.url }}">{{ product.title }}</a>
  </div>
{% endfor %}

Internal linking blog → product = transfer autorytetu na product pages.

FAQ schema na blog post

Wymaga custom Liquid:

{% if blog.metafields.seo.faq %}
  <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [...]
    }
  </script>
{% endif %}

Najczęstsze SEO błędy w Shopify

  1. Brak custom title/description — wszystko default
  2. Pusty description w kolekcjach — straty topical authority
  3. Default alt text — wszystkie obrazy z generic alt
  4. Apps spowalniające stronę — 5+ apps, LCP > 4s
  5. Brak custom canonical przy parametrach — duplicate content
  6. Non-edited robots.txt — blokowanie czegoś, czego nie chciałeś
  7. Krótki content na produkcie — 50 słów = thin content
  8. Brak schema FAQ — utrata AI Overviews chance

Tools dla Shopify SEO

  • Plug in SEO — audyt strony, alerts
  • SEO Manager — bulk edit meta tagów
  • Smart SEO — schema enhancements + automation
  • Yoast SEO for Shopify (jeśli istnieje plugin) — od Yoast
  • Outranking / Surfer SEO — content optimization
  • Ahrefs / Semrush — keyword research, monitoring

Tracking i monitoring

  1. GSC — submit sitemap, monitor performance
  2. GA4 — events „add to cart", „purchase"
  3. Shopify Analytics — natywne, ale ograniczone
  4. Server-side tracking (recommended dla GA4 z attribution)

Podsumowanie

Shopify SEO 2026:

  1. Custom title/description per page (nie default)
  2. Robots.txt edit w theme
  3. Schema Product + FAQ wszędzie
  4. Page speed audit — usuń niepotrzebne apps
  5. Content depth w produktach i kolekcjach
  6. URL handles krótkie i descriptive
  7. Internal linking blog → product

Shopify nie jest „najlepszym SEO platform", ale dobrze zoptymalizowany Shopify może wygrać z gorzej zoptymalizowanym WooCommerce. Klucz: szczegóły.

Zamów audyt SEO sklepu Shopify — sprawdzimy obecny stan i wskażemy quick wins + długoterminowy plan.

Potrzebujesz pomocy z tym tematem?

Zamów bezpłatny audyt i dowiedz się, jak możemy pomóc Twojej firmie rosnąć w internecie.

Bezpłatna wycena