Generi tag hreflang per pagine multilingue
Il generatore di tag hreflang trasforma un elenco strutturato di versioni linguistiche o regionali in elementi link HTML pronti da inserire.
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
Lei indica ogni codice locale con il relativo URL assoluto, aggiunge se necessario una destinazione generale x-default e riceve sia i singoli record sia un blocco HTML completo. Lo strumento convalida la sintassi, normalizza le maiuscole convenzionali, rifiuta i duplicati e protegge gli attributi HTML. È utile per siti multilingue, cataloghi internazionali, portali di documentazione e flussi editoriali che devono dichiarare pagine alternative in modo uniforme.
Crei una mappa completa delle versioni
Inserisca una riga per ogni pagina equivalente appartenente allo stesso gruppo multilingue o multiregionale. Ogni riga richiede un codice locale e un URL HTTP o HTTPS assoluto. Un codice semplice come it o fr va bene quando una sola pagina serve tutte le persone che parlano quella lingua. Aggiunga una regione, per esempio it-CH o fr-CA, se prezzi, disponibilità, ortografia o condizioni legali cambiano in base al mercato. Un sottotag di scrittura di quattro lettere distingue gli alfabeti, come zh-Hans o sr-Latn. Il generatore accetta una lingua di due o tre lettere, una scrittura facoltativa e una regione facoltativa di due lettere o tre cifre. Normalizza inoltre l’uso delle maiuscole per evitare markup incoerente. Includa la pagina corrente e tutte le alternative: un gruppo hreflang deve descrivere l’insieme completo. Scelga URL canonici, indicizzabili e specifici per il pubblico dichiarato. L’ordine delle righe resta invariato, rendendo il risultato stabile e facile da controllare nel versionamento.
Scelga x-default con attenzione
Usi il campo facoltativo x-default per la pagina destinata a chi non corrisponde a nessuna versione linguistica o regionale dichiarata. Può essere un selettore di lingua, una pagina internazionale o una versione neutrale che consenta di scegliere. Non inserisca x-default come riga ordinaria: il campo dedicato evita dichiarazioni duplicate o ambigue e colloca sempre il ripiego dopo i link specifici. Può lasciarlo vuoto se non esiste una destinazione generale utile. L’HTML restituito contiene un elemento link per ogni associazione e, se indicato, un elemento x-default aggiuntivo. Inserisca l’intero blocco nel head di tutte le pagine del gruppo oppure invii intestazioni Link equivalenti se l’applicazione gestisce le alternative tramite HTTP. Mantenga la reciprocità: ogni pagina deve indicare se stessa e lo stesso gruppo di alternative. Lo strumento genera la dichiarazione, ma non verifica che le pagine remote pubblichino gli stessi link, siano indicizzabili o non reindirizzino. Per questi controlli serve un audit o una scansione separata.
Convalidi, pubblichi e mantenga l’output
I codici non validi vengono rifiutati anziché prodotti silenziosamente. In questo modo emergono trattini bassi, spazi esterni, lingua mancante, sottotag aggiuntivi non supportati o x-default nell’elenco normale. Anche i duplicati vengono rifiutati dopo la normalizzazione, quindi en-us ed en-US non possono creare destinazioni concorrenti. Gli URL devono essere assoluti e usare HTTP o HTTPS; percorsi relativi e altri schemi non identificano pagine scansionabili. Quando l’input è valido, copi il campo html nel modello oppure utilizzi l’array links se il framework genera autonomamente i metadati del head. Ogni record contiene hreflang normalizzato, URL originale e tag completo, agevolando CMS e pipeline. Rigeneri il blocco quando cambiano le rotte, apre un mercato o si sposta il ripiego. Consideri la mappa una configurazione del sito da mantenere nel tempo. Nei processi automatici conservi l’input accanto alle rotte e confronti l’output durante il rilascio. Ogni richiesta API costa $0.002; il browser è adatto alle operazioni occasionali e l’API deterministica alle pubblicazioni ripetibili.
Casi d'uso
Lanciare un negozio regionale
Generi alternative coerenti per i prodotti di ogni Paese e un selettore internazionale come x-default.
Pubblicare documentazione localizzata
Trasformi le rotte tradotte in un blocco HTML stabile da includere in ogni compilazione del sito.
Automatizzare i metadati del CMS
Usi i link strutturati per compilare il head quando la redazione aggiunge o sposta una traduzione.
Domande frequenti
Quali formati di codice locale sono accettati?
Usi una lingua di due o tre lettere, seguita facoltativamente da una scrittura di quattro lettere e una regione di due lettere o tre cifre, come it, zh-Hans o es-419.
Il generatore include x-default?
Sì. Indichi l’URL facoltativo x_default e il relativo tag verrà aggiunto dopo quelli linguistici.
Perché i codici duplicati vengono rifiutati?
Ogni gruppo deve avere una destinazione per ciascun valore hreflang. I codici vengono confrontati dopo la normalizzazione.
Lo strumento verifica i link reciproci?
No. Crea il markup senza accesso alla rete. Per controllare il sito pubblicato usi un verificatore hreflang o una scansione.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. La stessa generazione deterministica può essere eseguita anche nel browser.
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/web/hreflang-tags-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"locales":[{"locale":"en","url":"https://example.com/en/product"},{"locale":"fr-FR","url":"https://example.com/fr/produit"}]}'const res = await fetch("https://api.kit.forhosting.com/web/hreflang-tags-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"locales": [
{
"locale": "en",
"url": "https://example.com/en/product"
},
{
"locale": "fr-FR",
"url": "https://example.com/fr/produit"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/hreflang-tags-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"locales": [
{
"locale": "en",
"url": "https://example.com/en/product"
},
{
"locale": "fr-FR",
"url": "https://example.com/fr/produit"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/hreflang-tags-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"locales":[{"locale":"en","url":"https://example.com/en/product"},{"locale":"fr-FR","url":"https://example.com/fr/produit"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"locales":[{"locale":"en","url":"https://example.com/en/product"},{"locale":"fr-FR","url":"https://example.com/fr/produit"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/hreflang-tags-generate", 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
{
"locales": [
{
"locale": "en",
"url": "https://example.com/en/product"
},
{
"locale": "fr-FR",
"url": "https://example.com/fr/produit"
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.hreflang_tags_generate",
"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.
Limiti
timeout_sec | 30 |
max_crawl_pages | 25 |
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. |