Sito multilingua
Legge i tag hreflang di una pagina e ti elenca le versioni in lingue diverse che dichiara, con il codice e l'URL di ognuna, segnalando se c'è l'x-default.
Esegui gratis nel browser
Su un sito multilingua l'hreflang serve a mostrare a ogni utente la versione giusta — l'italiano a chi cerca in italiano, l'inglese agli altri — ed è una delle configurazioni SEO che si sbaglia più facilmente.
Cosa fanno gli hreflang
Quando la stessa pagina esiste in più lingue, gli hreflang dicono a Google quale versione servire a seconda della lingua e del paese di chi cerca. Senza, il motore può mostrare la pagina inglese a un utente italiano, o considerare le varie versioni dei doppioni. Con hreflang corretti, ogni visitatore arriva sulla versione nella sua lingua e le pagine non si fanno concorrenza. È fondamentale per chi ha un sito in italiano e inglese, o serve mercati diversi con la stessa lingua.
L'errore più comune: i link di ritorno mancanti
Gli hreflang devono essere reciproci: se la pagina italiana indica quella inglese, la pagina inglese deve indicare a sua volta quella italiana. Se manca anche solo uno di questi rimandi, Google ignora l'intera annotazione e la configurazione non serve a niente. È l'errore che rovina la maggior parte delle implementazioni. Lo strumento ti elenca le versioni che ogni pagina dichiara; per verificare la reciprocità incolla anche le pagine sorelle e confronta gli elenchi — il rimando a senso unico salta fuori quando i due non combaciano.
Codici lingua e x-default
I codici devono seguire lo standard: “it” per l'italiano, “en-GB” o “en-US” quando distingui il paese, non sigle inventate come “it-IT” usato a caso o “ita”. Un codice sbagliato viene scartato da Google. Serve anche il valore x-default, la versione da mostrare a chi non rientra in nessuna lingua prevista. Lo strumento elenca ogni codice così com'è dichiarato e segnala la presenza dell'x-default, così individui a colpo d'occhio i codici storti; non li convalida contro le tabelle ISO né apre le pagine collegate. Incolli l'HTML e la lettura è gratis nel browser; l'analisi diretta da URL costa $0.002 a pagina.
Casi d'uso
Sito aziendale in italiano e inglese
Un'azienda di Milano con sito bilingue incolla le due versioni e scopre, confrontando gli elenchi, che le pagine italiane rimandano a quelle inglesi ma non viceversa: Google ignorava tutti gli hreflang. Sistemati i link di ritorno, gli utenti italiani smettono di ricevere la versione inglese nei risultati.
E-commerce che vende in più paesi
Un negozio online che spedisce in Italia, Francia e Spagna elenca i tag di ogni scheda prodotto per controllare che le tre versioni linguistiche siano dichiarate e che ci sia l'x-default, così ogni cliente vede i prezzi e la lingua giusti per il suo paese.
Portale con codici lingua sbagliati
Un portale turistico usava codici come “ita” e “ing” inventati: l'elenco li mostra tutti e chi lo gestisce li riconosce e li corregge con gli standard “it” e “en”, facendo finalmente funzionare la selezione della lingua.
Domande frequenti
Perché i miei hreflang non funzionano anche se ci sono?
Quasi sempre perché mancano i link di ritorno: gli hreflang devono essere reciproci. Se la pagina italiana indica l'inglese ma l'inglese non indica l'italiano, Google scarta tutto. Elenca i tag di entrambe le pagine e confronta: il rimando mancante si vede subito.
Che codice devo usare per l'italiano?
Basta “it” per l'italiano in generale; usi “it-IT”, “it-CH” e simili solo se distingui davvero il paese. L'importante è seguire lo standard: i codici inventati vengono ignorati da Google. Lo strumento te li elenca così come sono, per confrontarli con la norma.
Cos'è l'x-default e mi serve?
È la versione da mostrare a chi non rientra in nessuna delle lingue previste, tipicamente una pagina di scelta o quella in inglese. È consigliato su un sito multilingua: lo strumento segnala se manca.
È gratis?
Sì, incollando l'HTML la lettura gira nel browser senza costi né limiti. A pagamento è solo l'analisi diretta da URL, a $0.002 a pagina, comoda per leggere molte pagine in una volta.
I dati vengono inviati a un server?
No, nella modalità gratuita l'HTML resta nel tuo browser e non lascia il dispositivo, quindi puoi controllare anche un sito multilingua ancora in preparazione senza pubblicarlo.
Funziona con hreflang messi nella sitemap invece che nell'HTML?
Questo strumento legge gli hreflang inseriti nell'HTML della pagina. Se li dichiari nella sitemap, quella va verificata con lo strumento dedicato alle sitemap: qui incolli il codice della pagina.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/seo/hreflang-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'const res = await fetch("https://api.kit.forhosting.com/seo/hreflang-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/hreflang-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/hreflang-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/hreflang-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"url": "https://example.com"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.hreflang_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |