Générez une balise canonical depuis une URL HTTP valide
Le générateur de balises de lien canonical transforme une adresse web absolue en élément link HTML prêt à insérer dans l’en-tête d’une page.
Lancer gratuitement
Il vérifie que l’adresse est analysable et qu’elle emploie HTTP ou HTTPS, puis protège la valeur pour son utilisation dans un attribut HTML. Le résultat comprend l’URL canonical normalisée et la balise complète, ce qui convient à une correction manuelle, un circuit de publication, un système de modèles ou un processus SEO automatisé.
Choisissez l’URL qui représente la page de référence
Une balise canonical indique aux moteurs de recherche quelle URL absolue vous considérez comme la version de référence d’une page. Commencez par l’adresse qui doit conserver son autorité lorsque le même contenu est accessible avec des paramètres de suivi, des chemins de navigation alternatifs, une vue d’impression ou d’autres doublons. Incluez le schéma et le nom d’hôte, car un chemin relatif comme /guides/exemple ne désigne pas une page sans ambiguïté entre plusieurs sites. Choisissez explicitement HTTP ou HTTPS ; en production, privilégiez généralement l’adresse HTTPS accessible aux visiteurs et aux robots. Ne conservez les chemins, paramètres de requête et fragments significatifs que s’ils appartiennent réellement à l’adresse de référence. Ce générateur analyse et sérialise la valeur de façon cohérente, certains détails peuvent donc apparaître sous une forme normalisée. Il ne consulte pas la page, ne teste pas les redirections, ne compare pas les doublons et ne choisit pas la meilleure variante. Cette décision éditoriale vous revient. Avant la génération, vérifiez que la destination est publique, stable, indexable et conçue comme référence durable du contenu.
Produisez un balisage sûr pour l’en-tête du document
Envoyez l’adresse choisie dans le champ url. L’outil supprime les espaces périphériques, vérifie que la valeur est une URL absolue et accepte uniquement les schémas http et https. Les adresses mailto, ftp, javascript, file ou utilisant un protocole applicatif sont refusées, car elles ne constituent pas des canonicals web conventionnels. Un résultat valide contient canonical_url, qui présente l’adresse après analyse standard, et tag, qui fournit l’élément link complet. La valeur href est protégée pour un attribut HTML entre guillemets doubles, y compris les esperluettes des requêtes, afin que les caractères de l’URL ne deviennent pas de la syntaxe HTML. Placez l’élément produit dans head, normalement une seule fois par document. N’ajoutez pas une seconde déclaration canonical contradictoire et assurez-vous qu’aucun en-tête HTTP ni module du framework ne publie une autre destination. Le générateur produit une balise HTML concise sans barre XML finale, puisque link est un élément vide. Il crée uniquement le balisage, sans modifier de page ni contacter de serveur.
Contrôlez le déploiement et gardez une politique cohérente
Après l’ajout de la balise, examinez la source finale de la page ou la réponse définitive du serveur, et pas seulement le fichier modèle. Les CMS, modules SEO, thèmes et couches de rendu peuvent remplacer, dupliquer ou supprimer des éléments de l’en-tête après votre modification. Vérifiez qu’un seul lien canonical voulu est présent et que son href correspond à l’URL publique sélectionnée. Testez ensuite la destination dans son environnement de publication : elle doit répondre correctement, éviter les chaînes de redirections inutiles et ne pas être bloquée à l’indexation si vous recherchez de la visibilité. Appliquez la même règle à la pagination, aux collections filtrées, aux pages localisées, aux variantes mobiles et aux URL de campagne paramétrées. Les balises canonical sont des indications servant à regrouper des pages équivalentes, et non des redirections ou des contrôles d’accès ; chaque variante reste consultable. Si l’URL de référence change, régénérez la balise et actualisez les liens internes, sitemaps, redirections et données structurées si nécessaire. Pour l’automatisation, l’API coûte $0.002 par requête ; la version navigateur fournit localement le même résultat déterministe.
Cas d’usage
Préparer une balise pour un modèle CMS
Transformez l’URL de référence d’un article en balisage protégé à insérer dans head ou un champ de modèle.
Uniformiser les balises avant publication
Générez une URL canonical et un élément link cohérents avant l’assemblage et le déploiement des pages.
Traiter sûrement les URL paramétrées
Créez du HTML valide lorsqu’une adresse canonical contient des paramètres dont les esperluettes doivent être protégées.
Questions fréquentes
Quelles données le générateur accepte-t-il ?
Il accepte une URL absolue avec un schéma http ou https et un nom d’hôte. Les chemins relatifs et autres protocoles sont refusés.
L’outil vérifie-t-il que la page existe ?
Non. Il valide la syntaxe et le protocole de façon déterministe sans effectuer de requête réseau.
Pourquoi les esperluettes deviennent-elles & dans la balise ?
L’URL est protégée pour un attribut HTML. Le navigateur interprète ce balisage comme une esperluette dans l’adresse réelle.
Où faut-il placer la balise générée ?
Placez-la dans head et évitez de publier une autre balise canonical pointant vers une URL contradictoire.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. Le générateur intégré au navigateur convient aux besoins ponctuels.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/web/canonical-tag-generate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/articles/canonical-tags?edition=web"}'const res = await fetch("https://api.kit.forhosting.com/web/canonical-tag-generate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com/articles/canonical-tags?edition=web"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/canonical-tag-generate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com/articles/canonical-tags?edition=web"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/canonical-tag-generate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com/articles/canonical-tags?edition=web"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com/articles/canonical-tags?edition=web"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/canonical-tag-generate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"url": "https://example.com/articles/canonical-tags?edition=web"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.canonical_tag_generate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
timeout_sec | 30 |
max_crawl_pages | 25 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |