Schema för Shopify-butiker — vilka JSON-LD-typer behövs och hur undviker man duplicate-felen
Schema-markup är en av få SEO-investeringar med direkt mätbar effekt: rätt JSON-LD ger rich results i SERP, ökar CTR och förbättrar AI-citation-chans. Den här guiden visar vad en svensk Shopify-butik faktiskt behöver — och hur du undviker de vanliga felen som gör att Google ignorerar allt.
De fem schemas du behöver (i den här ordningen)
Glöm allt du läst om 30+ schema-typer. För en standard Shopify-butik räcker fem:
| Schema | Var | Effekt i SERP |
|---|---|---|
| Organization | Sitewide (theme.liquid) | Knowledge Panel, entity disambiguation |
| Product | Per produktsida | Pris, lager, rating i SERP |
| BreadcrumbList | Kollektion + produkt | Breadcrumb-pil i SERP |
| WebSite | Sitewide | Sitelinks Search Box |
| FAQPage | Sidor med riktig FAQ | Expanderbara svar i SERP* |
*FAQ-rich-results har minskats av Google 2023+, men strukturen är fortfarande värdefull för AI extraction (ChatGPT, Perplexity).
1. Organization (sitewide)
En enda Organization-schema sitewide. Lägg i theme.liquid i <head>.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "{{ shop.url }}/#organization",
"name": "{{ shop.name }}",
"url": "{{ shop.url }}",
"logo": {
"@type": "ImageObject",
"url": "{{ 'logo.png' | asset_url }}",
"width": 200,
"height": 60
},
"description": "{{ shop.description | escape }}",
"address": {
"@type": "PostalAddress",
"streetAddress": "Gatuadress 1",
"addressLocality": "Stockholm",
"postalCode": "111 22",
"addressCountry": "SE"
},
"contactPoint": [{
"@type": "ContactPoint",
"contactType": "customer service",
"telephone": "+46812345678",
"email": "info@example.se",
"availableLanguage": ["Swedish", "English"]
}],
"sameAs": [
"https://www.linkedin.com/company/your-brand",
"https://www.instagram.com/your-brand",
"https://www.facebook.com/your-brand"
]
}
</script>
@id med #organization. Då kan andra schemas referera den med {"@id": "..."} istället för att duplicera all information.2. Product (per produktsida)
Detta är schemat som ger pris/rating/availability i SERP. Lägg i product.liquid eller main-product.liquid (OS 2.0).
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "{{ canonical_url }}#product",
"name": "{{ product.title | escape }}",
"description": "{{ product.description | strip_html | strip_newlines | escape | truncate: 500 }}",
"image": [
{% for image in product.images limit: 3 %}
"{{ image | img_url: '1200x' }}"{% unless forloop.last %},{% endunless %}
{% endfor %}
],
"sku": "{{ product.selected_or_first_available_variant.sku }}",
"brand": {
"@type": "Brand",
"name": "{{ product.vendor | default: shop.name | escape }}"
},
"offers": {
"@type": "Offer",
"url": "{{ canonical_url }}",
"priceCurrency": "{{ shop.currency }}",
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency | replace: ',', '.' }}",
"priceValidUntil": "{{ 'now' | date: '%Y' | plus: 1 }}-12-31",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}",
"itemCondition": "https://schema.org/NewCondition"
}
}
</script>
"1 299,00 kr"). Google kräver maskinläsbart format: decimal med punkt, ingen valutasymbol, inga tusentalsavgränsare. Använd money_without_currency + replace: ',', '.'.aggregateRating innan du har riktiga reviews (eller utan att kunna verifiera dem). Google har tagit bort rich results-eligibility 2023 för "self-serve ratings" — ratings måste komma från en verifierad app (Judge.me, Yotpo, Stamped) eller importeras från Google Reviews.3. BreadcrumbList
Lägg på kollektions- och produktsidor. Hjälper Google visa breadcrumb-pil i SERP istället för bara URL:en.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Hem",
"item": "{{ shop.url }}/"
},
{% if collection %}
{
"@type": "ListItem",
"position": 2,
"name": "{{ collection.title }}",
"item": "{{ shop.url }}{{ collection.url }}"
},
{% endif %}
{
"@type": "ListItem",
"position": {% if collection %}3{% else %}2{% endif %},
"name": "{{ product.title | escape }}",
"item": "{{ canonical_url }}"
}
]
}
</script>
4. WebSite (sitewide, en gång)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "{{ shop.url }}/#website",
"url": "{{ shop.url }}",
"name": "{{ shop.name }}",
"inLanguage": "sv-SE",
"publisher": { "@id": "{{ shop.url }}/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "{{ shop.url }}/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
</script>
5. FAQPage (endast på riktiga FAQ-sidor)
Inte på alla sidor. Lägg bara där du har en faktisk FAQ-sektion synlig på sidan.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"inLanguage": "sv-SE",
"mainEntity": [
{
"@type": "Question",
"name": "Hur lång leveranstid har ni?",
"acceptedAnswer": {
"@type": "Answer",
"text": "1–3 arbetsdagar med standardfrakt. Express samma dag om beställt före kl 12."
}
}
]
}
</script>
De fyra vanligaste schema-felen på Shopify
Fel 1: Duplicate Product schema (theme + app)
Många reviews-appar (Judge.me, Yotpo) lägger sin egen Product-schema med ratings. Om din theme också har Product-schema → två block för samma produkt → duplicate aggregateRating → Google ignorerar båda.
Fix: Stäng av theme's Product-schema och låt review-appen sköta det. Eller tvärtom — men bara en ska finnas.
Fel 2: aggregateRating utan reviews
Att hårdkoda "aggregateRating": {"ratingValue": "4.8", "reviewCount": "127"} i schemat utan att ha 127 reviews synliga på sidan = Google ger manual action.
Fix: Använd review-app som genererar schema dynamiskt från riktiga reviews.
Fel 3: Felaktig prisformat
Priset måste vara maskinläsbart: "1299.00" inte "1 299 kr". Annars rich results disabled.
Fel 4: Speakable på fel selectors
Om du lägger Speakable-schema som pekar på CSS-selectors som inte finns i DOM → varning i GSC.
Fix: Verifiera selectors finns. ".product-description", "h1" är säkra.
Validera ditt schema
- validator.schema.org — strikt validation av Schema.org-spec
- Google Rich Results Test — visar om Google ser ditt schema som rich-result-eligible
- Eller använd vår SEO-checker — den listar alla schema-typer på en URL och flaggar fel
Vad du absolut inte ska göra
- Inte lägg in
ServiceellerLocalBusinesspå en e-handelsbutik — det är för konsulttjänster - Inte använd
Articlepå produktsidor - Inte hårdkoda priser eller ratings — använd Liquid-variabler
- Inte glöm
@id— det gör att schemas kan kopplas ihop