Il negozio è online, i prodotti ci sono, ma su Google si vede poco. Prima di parlare di contenuti e di link, conviene controllare una cosa più concreta: il codice del tema. Una buona parte della SEO di Shopify dipende da come il tema stampa titoli, descrizioni, intestazioni e dati strutturati.
In breve: Shopify genera da solo sitemap.xml, robots.txt e, con i Mercati, i tag hreflang. Nel codice del tema restano da controllare: title, meta description e canonical in theme.liquid, un solo H1 per pagina, i dati strutturati dei prodotti, i link verso i prodotti nelle collezioni e il testo alternativo delle immagini.
Questo articolo parla solo di codice del tema. Per la parte di contenuti, campagne e promozione c’è l’articolo sulle strategie di marketing per vendere di più su Shopify.
Cosa fa già Shopify per la SEO
Partiamo da quello che non devi fare tu, così non perdi tempo con app che promettono di “attivarlo”:
- sitemap.xml: Shopify la genera e la aggiorna da sola, con prodotti, collezioni, pagine e articoli del blog, come spiega la guida su come trovare e inviare la sitemap;
- robots.txt: c’è già, e blocca carrello, checkout, ricerca interna, gli URL ordinati con
sort_bye le combinazioni di più filtri. Puoi leggerlo aprendoiltuonegozio.it/robots.txt; - hreflang: se vendi in più lingue o paesi con i Mercati, i tag vengono creati in automatico in base alla configurazione, come indica la guida sulla SEO internazionale per i mercati;
- title e description di prodotti, collezioni e pagine si scrivono nell’admin, nel riquadro dell’anteprima nei motori di ricerca;
- canonical: l’oggetto
canonical_urlfornisce l’indirizzo principale di ogni pagina; tocca al tema stamparlo.
Questa base tecnica è uno dei motivi per cui una migrazione fatta bene non perde posizioni: il resto lo fanno URL e redirect, come racconto in migrare da WooCommerce a Shopify senza perdere SEO.
Title, description e canonical nel tema
Il primo file da aprire è layout/theme.liquid. Nella parte <head> devono esserci queste righe; questa è la versione di Dawn, il tema di riferimento di Shopify:
layout/theme.liquid (estratto da Dawn)
<link rel="canonical" href="{{ canonical_url }}">
<title>
{{ page_title }}
{%- if current_tags %} – tagged "{{ current_tags | join: ', ' }}"{% endif -%}
{%- if current_page != 1 %} – Page {{ current_page }}{% endif -%}
{%- unless page_title contains shop.name %} – {{ shop.name }}{% endunless -%}
</title>
{% if page_description %}
<meta name="description" content="{{ page_description | escape }}">
{% endif %}Riga per riga: il canonical usa l’indirizzo che Shopify considera principale. Il title parte da page_title, cioè il titolo SEO scritto nell’admin o, se manca, il nome della pagina. Poi aggiunge i tag filtrati e il numero di pagina, così la pagina 2 di una collezione non ha lo stesso titolo della pagina 1, e in fondo il nome del negozio, se non c’è già. La description usa page_description con escape, che neutralizza le virgolette.

Le parole “tagged” e “Page” in Dawn sono in inglese: in un negozio italiano le traduco con chiavi nei file locales/ e il filtro t. Gli errori che trovo più spesso nei temi modificati sono altri: canonical assente, title scritto a mano uguale per tutte le pagine, description senza escape, o un secondo <title> aggiunto da un’app.
Un solo H1 per pagina
L’H1 è il titolo principale della pagina. Non è una regola rigida per Google, ma un H1 chiaro e unico aiuta chi legge, chi usa un lettore di schermo e chi deve capire di cosa parla la pagina. Nei temi però succede di tutto.
- in Dawn il logo è un H1 solo nella home; nella pagina prodotto l’H1 è il nome del prodotto, in
sections/main-product.liquid; - in alcuni temi il logo è un H1 in tutte le pagine, e la pagina prodotto finisce con due H1;
- molte sezioni banner permettono di scegliere la dimensione del titolo, e qualcuno sceglie H1 per farlo più grande;
- alcune pagine collezione non hanno nessun H1, perché il titolo è nascosto dalle impostazioni.
Per controllare apri la pagina, visualizza il sorgente e cerca <h1>. Se ne trovi più di uno, la correzione è quasi sempre nel file della sezione: cambi il tag in <h2> o in un <p> con la classe di stile, senza cambiare l’aspetto.
Dati strutturati dei prodotti
I dati strutturati sono un blocco JSON nascosto che descrive il prodotto a Google: nome, immagine, prezzo, disponibilità. Servono per le schede prodotto arricchite nei risultati di ricerca, descritte nella guida di Google sui dati strutturati dei prodotti.
Il filtro structured_data
Shopify ha un filtro che li genera da solo, partendo dall’oggetto prodotto. È il metodo che preferisco, perché si aggiorna con prezzi e varianti senza manutenzione:
sections/main-product.liquid
<script type="application/ld+json">
{{ product | structured_data }}
</script>Secondo la documentazione del filtro structured_data, il risultato è un Product per i prodotti senza varianti e un ProductGroup per quelli con varianti. Dawn lo usa già in fondo alla sezione prodotto. Il problema tipico è il doppione: il tema stampa i suoi dati, un’app di recensioni aggiunge i propri, e Google trova due prodotti con informazioni diverse. Ne deve restare uno coerente.
Quando scriverli a mano
Li scrivo a mano solo su temi vecchi senza il filtro, o quando servono campi che il filtro non dà. Una base minima, corretta per valute con i centesimi come l’euro:
snippets/dati-prodotto.liquid
{%- assign v = product.selected_or_first_available_variant -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"image": {{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }},
"description": {{ product.description | strip_html | truncate: 300 | json }},
"sku": {{ v.sku | json }},
"offers": {
"@type": "Offer",
"url": {{ request.origin | append: v.url | json }},
"price": {{ v.price | divided_by: 100.0 | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"availability": "https://schema.org/{% if v.available %}InStock{% else %}OutOfStock{% endif %}"
}
}
</script>Il filtro json è fondamentale: mette le virgolette e gestisce i caratteri speciali, così un titolo con le virgolette non rompe il JSON. I prezzi sono in centesimi, quindi divido per 100.0. E una regola che vale sempre: i dati devono corrispondere a quello che il cliente vede nella pagina. Dopo ogni modifica provo la pagina con lo strumento di test dei risultati multimediali di Google e controllo i rapporti in Search Console.
Collezioni, filtri e contenuti duplicati
URL dei prodotti dentro le collezioni
Lo stesso prodotto può avere due indirizzi: /products/sneaker-bianca e /collections/scarpe/products/sneaker-bianca. Il secondo nasce quando il tema crea i link con il filtro within, che la documentazione stessa invita a usare pensando alle conseguenze SEO. Shopify mette nel canonical l’indirizzo /products/…, quindi non è un disastro, ma Google deve comunque scansionare più indirizzi per la stessa pagina.
Nei temi recenti, come Dawn, le schede prodotto delle collezioni puntano direttamente a /products/…. Se nel tuo tema trovi | within: collection nello snippet della scheda prodotto, valuta di toglierlo: i link interni puliti sono un vantaggio semplice da ottenere.
robots.txt.liquid
Il robots.txt predefinito è già ragionevole. Se ti serve una regola in più, crei il template templates/robots.txt.liquid partendo dal codice della guida ufficiale su come personalizzare robots.txt, che mantiene le regole di Shopify e ne aggiunge altre:
templates/robots.txt.liquid
{% for group in robots.default_groups %}
{{- group.user_agent }}
{%- for rule in group.rules -%}
{{ rule }}
{%- endfor -%}
{%- if group.user_agent.value == '*' -%}
{{ 'Disallow: /*?q=*' }}
{%- endif -%}
{%- if group.sitemap != blank -%}
{{ group.sitemap }}
{%- endif -%}
{% endfor %}Prima di pubblicare salvo una copia del robots.txt attuale e la confronto con il nuovo, come consiglia Shopify. E ricordo sempre la differenza: robots.txt impedisce la scansione, non l’indicizzazione. Per le pagine filtrate Google suggerisce noindex o il blocco nel robots.txt a seconda dell’obiettivo, e per le pagine della paginazione un canonical proprio per ogni pagina, come spiega la guida di Google su paginazione e caricamento progressivo. Shopify lo fa già: la pagina 2 di una collezione ha come canonical sé stessa.
Immagini e testo alternativo
Il testo alternativo si scrive nell’admin, su ogni immagine del prodotto. Il tema deve solo usarlo: il filtro image_tag mette da solo nell’attributo alt il testo dell’immagine, e imposta il caricamento differito per le immagini più in basso nella pagina, come indica la pagina del filtro image_tag.
{{ product.featured_image | image_url: width: 1200 | image_tag: sizes: '(min-width: 990px) 50vw, 100vw' }}Il problema che trovo più spesso è il contrario: temi o sezioni personalizzate con alt="" scritto a mano, o con il nome del file. Cerca alt= negli snippet delle schede prodotto e della galleria. Su come scrivere un buon testo alternativo e alleggerire le immagini c’è la guida su come ottimizzare le immagini per la SEO. Se vuoi mostrare informazioni tecniche del prodotto come testo vero e non dentro le foto, i metafield di Shopify sono la strada giusta.
Checklist SEO del tema
Questa è la lista che uso quando controllo il tema di un negozio. Ogni voce si verifica in pochi minuti con il sorgente della pagina e Search Console:

- canonical presente in
theme.liquid, concanonical_url; - un solo
<title>, con numero di pagina sulle pagine successive; - meta description da
page_description, conescape; - un H1 per pagina: prodotto, collezione, pagina, articolo;
- dati strutturati del prodotto presenti una volta sola e coerenti con la pagina;
- link delle schede prodotto verso
/products/…; - robots.txt predefinito, o personalizzato con
robots.default_groups; - testo alternativo stampato da
image_tag, maialt=""sulle foto prodotto; - paginazione con link veri, non solo “carica altri” in JavaScript.
Per leggere i dati e vedere l’effetto delle correzioni ti serve Search Console: se non l’hai ancora collegata, segui la guida su come collegare Google Search Console e leggere i dati SEO. Per tutto quello che non è codice del tema c’è la checklist completa per ottimizzare un sito già online. Se vuoi capire meglio i file che hai appena visto, parti dalla guida pratica a Liquid.
Domande frequenti
Conclusione
La SEO tecnica di Shopify è più semplice che su altre piattaforme, perché molte cose sono già fatte. Proprio per questo gli errori che restano sono quasi sempre nel tema: titoli, H1, dati strutturati doppi, link alle collezioni, testi alternativi. Si trovano in poco tempo e si correggono con poche righe.
Se il negozio è nuovo o va migrato, la SEO del tema la imposto dall’inizio nella realizzazione e migrazione Shopify; per i controlli periodici c’è l’assistenza e manutenzione del negozio online.
Vuoi un controllo SEO del tema del tuo negozio? Mandami il link: te lo faccio io, con l’elenco delle correzioni. Ti rispondo io.




