Smart_SEO_Media
IT
8 min read Technical SEO

Sitemap che Google indicizza davvero: quello che le guide non dicono

GSC mostra "0 pagine indicizzate" sulla tua sitemap. Le pagine sono online e raggiungibili. Panico. Ma prima di rifare tutto, ecco come distinguere il bug GSC dal vero problema.

La prima volta che ho visto "Inviati: 12 — Indicizzati: 0" in Google Search Console per smartweb-media.com, ho pensato a un problema serio. Le pagine erano online, il sito funzionava, nessun errore visibile.

Dopo un'analisi più attenta, ho capito che il numero era fuorviante — non rifletteva lo stato reale dell'indicizzazione. Era un artefatto di come GSC conta le pagine in presenza di una doppia proprietà www/non-www.

Ecco cosa ho trovato, come verificare lo stato reale, e quando invece il "0 indicizzati" è davvero un problema da risolvere.

Il bug: doppia proprietà www e non-www in GSC

Google Search Console distingue le proprietà in modo molto preciso. https://smartweb-media.com/ e https://www.smartweb-media.com/ sono due proprietà separate — anche se il sito ha un redirect 301 da una all'altra.

situazione smartweb-media.com

Proprietà 1: https://smartweb-media.com/
  Permesso: Owner
  Sitemap inviata: smartweb-media.com/sitemap.xml
  Inviati: 12 | Indicizzati: 0  ← numero fuorviante

Proprietà 2: https://www.smartweb-media.com/
  Permesso: Full User
  Sitemap inviata: www.smartweb-media.com/sitemap.xml
  Inviati: 12 | Indicizzati: 0  ← idem

Il redirect 301 da www → non-www è attivo e funzionante. Google ha crawlato le pagine e le ha indicizzate sotto la versione non-www. Ma il contatore "Indicizzati" nella sezione Sitemap di GSC viene aggiornato con ritardo — spesso settimane — e può rimanere a 0 anche quando le pagine sono correttamente indicizzate.

Questo è un comportamento documentato di GSC, non un'anomalia del sito.

La fonte di verità: URL Inspection

Il contatore della sitemap è un aggregato lento. L'unica fonte affidabile sullo stato reale di ogni URL singolo è lo strumento Ispezione URL in GSC.

risultati URL Inspection — smartweb-media.com

URL: /
  Stato: PASS | Coverage: Submitted and indexed ✅
  Ultimo crawl: 2026-03-19 | Crawled as: MOBILE

URL: /servizi.html
  Stato: PASS | Coverage: Submitted and indexed ✅
  Ultimo crawl: 2026-03-10

URL: /blog/seo-audit-con-claude-pipeline.html
  Stato: PASS | Coverage: Submitted and indexed ✅
  Ultimo crawl: 2026-03-08

URL: /index-en.html
  Stato: NEUTRAL ⚠️
  Coverage: Duplicate, Google chose different canonical than user

Le prime tre pagine: indicizzate, nessun problema. Il problema reale è /index-en.html — Google ha deciso di usare un canonical diverso da quello dichiarato. Questo è un problema concreto, non il "0 indicizzati" della sitemap.

Script Python: verifica automatica via URL Inspection API

Invece di controllare ogni URL manualmente in GSC, uso la URL Inspection API per automatizzare il controllo su tutte le pagine della sitemap:

check_indexing.py

from google.oauth2 import service_account
from googleapiclient.discovery import build
import requests
import xml.etree.ElementTree as ET

SCOPES   = ['https://www.googleapis.com/auth/webmasters.readonly']
KEY_FILE = 'service-account.json'
SITE_URL = 'https://smartweb-media.com/'

def get_service():
    creds = service_account.Credentials.from_service_account_file(
        KEY_FILE, scopes=SCOPES)
    return build('searchconsole', 'v1', credentials=creds)

def get_sitemap_urls(sitemap_url):
    """Legge tutti gli URL dalla sitemap XML."""
    resp = requests.get(sitemap_url, timeout=10)
    root = ET.fromstring(resp.content)
    ns = {'sm': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
    return [loc.text for loc in root.findall('.//sm:loc', ns)]

def check_url_indexing(service, url, site_url):
    """Controlla lo stato di indicizzazione di un URL specifico."""
    try:
        result = service.urlInspection().index().inspect(
            body={'inspectionUrl': url, 'siteUrl': site_url}
        ).execute()

        idx = result.get('inspectionResult', {}).get('indexStatusResult', {})
        return {
            'url': url,
            'verdict': idx.get('verdict', 'UNKNOWN'),
            'coverage': idx.get('coverageState', 'UNKNOWN'),
            'last_crawl': idx.get('lastCrawlTime', 'N/A')[:10] if idx.get('lastCrawlTime') else 'N/A',
            'canonical_gsc': idx.get('googleCanonical', ''),
            'canonical_declared': idx.get('userCanonical', ''),
            'referring_urls': idx.get('referringUrls', [])
        }
    except Exception as e:
        return {'url': url, 'verdict': 'ERROR', 'coverage': str(e)}

def audit_indexing(sitemap_url=f"{SITE_URL}sitemap.xml"):
    """Verifica lo stato di indicizzazione di ogni URL nella sitemap."""
    service = get_service()
    urls = get_sitemap_urls(sitemap_url)

    print(f"Controllo indicizzazione per {len(urls)} URL\n{'='*60}")
    results = {'indexed': [], 'issues': [], 'errors': []}

    for url in urls:
        status = check_url_indexing(service, url, SITE_URL)
        path = url.replace(SITE_URL.rstrip('/'), '') or '/'

        if status['verdict'] == 'PASS':
            print(f"  ✅ {path:<50} {status['coverage']}")
            print(f"     Ultimo crawl: {status['last_crawl']}")
            results['indexed'].append(status)
        elif status['verdict'] == 'NEUTRAL':
            print(f"  ⚠️  {path:<50} {status['coverage']}")
            if status['canonical_gsc'] != status['canonical_declared']:
                print(f"     Google canonical: {status['canonical_gsc']}")
                print(f"     Tuo canonical:    {status['canonical_declared']}")
            results['issues'].append(status)
        elif status['verdict'] == 'FAIL':
            print(f"  ❌ {path:<50} {status['coverage']}")
            results['errors'].append(status)
        else:
            print(f"  ?  {path:<50} {status['verdict']}")

    print(f"\n{'='*60}")
    print(f"RIEPILOGO:")
    print(f"  ✅ Indicizzate:  {len(results['indexed'])}")
    print(f"  ⚠️  Con problemi: {len(results['issues'])}")
    print(f"  ❌ Errori:       {len(results['errors'])}")

    return results

if __name__ == '__main__':
    audit_indexing()

Quando "0 indicizzati" è davvero un problema

Il "0 indicizzati" nella sitemap è un falso allarme solo in certi casi. Ecco quando è un problema reale:

🔴 URL Inspection mostra FAIL

Se l'Ispezione URL mostra "Non indicizzato" con motivi come "crawlato ma non indicizzato", "pagina reindirizzata", o "duplicate senza canonical selezionato" — è un problema reale che richiede azione.

🔴 Le URL nella sitemap restituiscono errori HTTP

Se le pagine nella sitemap restituiscono 404, 500 o redirect a pagine diverse — Google non può indicizzarle. Controlla con uno script che verifichi lo status code di ogni URL.

🔴 robots.txt blocca il crawl

Se il robots.txt ha un Disallow: / o blocca specifiche directory, Google non può crawlare quelle pagine anche se sono nella sitemap.

🟡 Il sito ha meno di 3 mesi

I siti nuovi vengono crawlati più lentamente. Se hai inviato la sitemap di recente, aspetta 2-4 settimane prima di preoccuparti. Usa l'URL Inspection per verificare lo stato singolo.

✅ URL Inspection mostra PASS → nessun problema reale

Se l'Ispezione URL mostra "Inviata e indicizzata" per le pagine principali, il contatore della sitemap è un artefatto di ritardo. Attendi l'aggiornamento o ignora — le pagine sono indicizzate.

Come ottimizzare la sitemap per velocizzare l'indicizzazione

1. Includi solo URL canonici

La sitemap dovrebbe contenere solo la versione canonica di ogni URL — quella che hai dichiarato nel tag canonical. Se includi la versione www e la versione non-www della stessa pagina, stai confondendo Google.

2. Usa lastmod in modo accurato

sitemap.xml — formato corretto

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://smartweb-media.com/</loc>
    <lastmod>2026-03-30</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://smartweb-media.com/blog/seo-audit-con-claude-pipeline.html</loc>
    <lastmod>2026-03-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

3. Usa la proprietà di dominio in GSC

Invece di gestire proprietà separate per www e non-www, puoi aggiungere una proprietà di dominio in GSC che copre tutte le varianti automaticamente:

  1. In GSC → Aggiungi proprietà → Dominio (non URL)
  2. Inserisci: smartweb-media.com (senza https://)
  3. Verifica con record DNS TXT
  4. Questa proprietà aggrega i dati di tutte le varianti: http, https, www, non-www

Stai interpretando correttamente i dati di GSC?

GSC è potente ma pieno di metriche fuorvianti. Analizzo i tuoi dati, distinguo i problemi reali dai falsi allarmi, e ti dico cosa vale la pena fixare.

Request Free Audit

Keep Reading