Guide : The Meta Charset Tag

Ce que <meta charset="utf-8"> fait, pourquoi le HTML spec veut il dans le premier 1024 bytes, comment a incorrect encoding causes mojibake, et pourquoi c’est a rendu-correctness problème plutôt que a facteur de classement.

Première publication : 2 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé
1 indice probant sur cette page

Le meta charset balise — <meta charset="utf-8"> — declares votre page's character encoding donc navigateurs et robots d’exploration turn raw bytes dans le correct characters. Le HTML spec exige il dans le premier 1024 bytes de le document, et meilleur pratique est le literal premier child de <head>. Obtenir il incorrect (manquant, late, or a mismatched encoding) et vous obtenir mojibake: accented letters, curly citations, em dashes, non-Latin scripts, et emoji rendre as garbage — qui peut corrupt qu’est-ce que affiché et indexé. Il n’est pas a direct facteur de classement; Google's seulement guidance est à 'utiliser Unicode/UTF-8 où possible.' UTF-8 est le near-universal, spec-requis encoding pour HTML5 aujourd’hui. A serveur-sent Contenu-Type header charset overrides le dans-page balise, qui est a courant source de migration bugs. Ce est un de le navigateur-facing balises dans le meta-balises cluster.

TL;DR — <meta charset="utf-8"> declares le document’s character encoding. Le WHATWG HTML spec exige le declaration à être serialized complètement dans le premier 1024 bytes de le document, et pour HTML5 le valeur doit match utf-8; meilleur pratique est placing il as le literal premier child de <head>. A manquant, late, or mismatched encoding produces mojibake — corrupted accented characters, curly citations, non-Latin scripts, et emoji — qui est a rendu et indexation-correctness problème, pas a classement signal. Google’s seulement public line est “utiliser Unicode/UTF-8 où possible.” A serveur-sent Content-Type charset header overrides le dans-document balise, qui est a classic post-migration mojibake bug. Seulement un charset meta element est allowed per document, et il a aucun effect dans XML. A UTF-8 byte-order mark (BOM), si présent, wins over tout sinon; sinon le HTTP header wins over le dans-page balise — complet precedence order ci-dessous.

Preuve à l’appui de cette affirmation For HTML documents, the charset declaration must identify UTF-8. Portée : Modern HTML conformance requirements. Niveau de confiance : élevé · Vérifié : WHATWG HTML: Character encoding declaration Preuve à l’appui de cette affirmation The complete character-encoding declaration must occur within the first 1024 bytes of the document. Portée : HTML serialization requirement intended to make encoding available early to parsers. Niveau de confiance : élevé · Vérifié : WHATWG HTML: Specifying the document's character encoding

Ce que the tag is

«The charset declaration tells a parser which character encoding to use when it turns the document’s bytes into text. The WHATWG HTML Living Standard puts it plainly: “The charset attribute specifies the character encoding used by the document. This is a character encoding declaration.” MDN’s framing is the practical version: “This attribute declares the document’s character encoding.” » (Traduction) (Résumé en français de la section quarante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

The modern syntax is the short formulaire:

<meta charset="utf-8">

There’s aussi a legacy pre-HTML5 formulaire you’ll encore voir in older templates:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Les deux declare le même chose. On a modern HTML5 document vous seulement besoin le court <meta charset="utf-8"> — en utilisant les deux est redundant, pas harmful, et le spec permet seulement un charset-declaring meta element per document anyway. (Le http-equiv formulaire est meilleur thought de as legacy plutôt que quelque chose à ajouter fresh; si vous êtes auditing une page que a il, il n’est pas broken, c’est simplement old.)

The spec requirements vous en réalité besoin to know

«UTF-8 is effectively mandatory for HTML5. MDN states it directly: the attribute’s “value must be an ASCII case-insensitive match for the string utf-8, because UTF-8 is the only valid encoding for HTML5 documents.” The WHATWG spec goes further and requires the document’s actual encoding to be UTF-8 regardless of what’s declared. UTF-8 covers essentially every script plus emoji, which is why the ISO-8859-1 / Windows-1252 / Shift-JIS era of per-region encodings is over for new work — those survive only as legacy compatibility cases. » (Traduction) (Résumé en français de la section cinquante, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Il doit land dans le premier 1024 bytes de le document. Ce est a difficile spec requirement, pas a soft suggestion. MDN: “<meta> elements qui declare a character encoding doit être located entirely dans le premier 1024 bytes de le document.” Le raison est mechanical — le parser sniffs le byte stream pour an encoding avant il peut safely interpret le rest. Si votre declaration montre up aussi late, le parser peut déjà ont committed à a guessed encoding (or ont à restart, qui coûts performances). Remarque le framing carefully: c’est le premier 1024 bytes de le entier document, pas simplement de <head>.

Preuve à l’appui de cette affirmation The complete character-encoding declaration must occur within the first 1024 bytes of the document. Portée : HTML serialization requirement intended to make encoding available early to parsers. Niveau de confiance : élevé · Vérifié : WHATWG HTML: Specifying the document's character encoding

«Best practice beats the spec minimum: make it the first child of <head>. Don’t settle for “somewhere in the first 1024 bytes” — put <meta charset="utf-8"> before your <title>, <link>, <script>, <style>, and every other tag. This is the placement modern tooling checks. There’s an open Lighthouse issue (#10023) proposing an audit that specifically checks whether <meta charset> equals document.head.firstElementChild — i.e. flagging the tag when it isn’t the literal first element in head, not merely when it’s missing. The direction of tooling is toward checking placement, not just presence. » (Traduction) (Résumé en français de la section cinquante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Seulement un charset meta element per document, et le charset attribut a aucun effect dans XML/XHTML documents (c’est permitted là seulement à ease migration à et depuis XML). Worth a caveat si vous êtes fonctionnement avec XHTML-servi contenu or RSS/Atom-adjacent templates.

BOM, HTTP header, meta balise — le precedence order

Navigateurs ne pas simplement lire le meta balise dans isolation; le encoding-sniffing algorithm vérifications three sources dans a fixed order, et le premier un que donne an réponse wins:

  1. A UTF-8 byte-order mark (BOM) — a quelques bytes à le very commencer de le fichier. Si le navigateur detects a BOM, que determines le encoding avec certainty; rien sinon est consulted.
  2. Le HTTP Content-Type header’s charset, si le serveur sends un et il y a aucun BOM. Ce takes precedence over le dans-document meta declaration.
  3. Le dans-document <meta charset> (or legacy http-equiv) declaration, vérifié seulement si aucun de le ci-dessus supplied an encoding.
Preuve à l’appui de cette affirmation A UTF-8 BOM takes precedence over HTTP and in-document declarations; otherwise an HTTP charset has higher precedence than meta, so server and document declarations must agree. Portée : HTML documents, HTTP delivery and rendered metadata as applicable Niveau de confiance : élevé · Vérifié : Declaring character encodings in HTML

En pratique, BOMs sont rare on hand-authored HTML (ils sont plus courant as an artifact de certain texte editors or fichier-export outils), donc le header-vs-balise conflict est le un que bites la plupart souvent: une page que correctement declares <meta charset="utf-8"> peut encore rendre garbled si a CDN, reverse proxy, or misconfigured serveur sends a différent charset dans le header. c’est a classic symptom correct après a serveur or CDN migration — le HTML n’a pas modifier, mais le header a fait, et maintenant le header est fighting le balise. Quand vous êtes debugging mojibake, vérifier pour a BOM et la réponse header charset, pas simplement lune page source.

Est meta charset an SEO facteur de classement?

Aucun — et c’est worth étant blunt parce que fear-based audit-outil copy parfois implies sinon. Ce est a rendu- et indexation-correctness prerequisite, pas a classement signal.

Google’s guidance ici est thin et indirect comparé à le balises il discusses constantly (titre, meta description, robots, canonical). Là est aucun dedicated Google Recherche Central page à propos de character encoding — c’est un entry à l’intérieur le general meta balises Google prend en charge référence, sous “Content-Type and charset.” Google’s seulement on-record line est a recommendation, pas a classement claim: “Nous recommend en utilisant Unicode/UTF-8 où possible.” Aucun verbatim statement depuis Mueller, Illyes, Splitt, or Canel précisément naming “meta charset” or “mojibake” surfaces dans le trade press or Recherche Off le Record archives — charset est treated as basic web-standards hygiene, tableau stakes comme valide markup, plutôt que a topic warranting SEO commentary.

Bing a aucun distinct public position on le sur la page balise soit; son documentation références UTF-8 seulement pour son propre API/feed formats (IndexNow clé fichiers, Webmaster API requête headers), pas as guidance à propos de le HTML <meta charset> on votre pages. Since Bingbot est a standard HTML parser, le practical implication est le même: suivre le HTML spec’s UTF-8 / 1024-byte règle.

Donc où peut il hurt vous? Indirectly, et seulement quand le encoding est genuinely broken: garbled texte est a contenu-qualité et UX problème, il peut corrupt ce que apparaît dans extraits, et severely broken sortie peut regarder broken à Google’s indexation systèmes aussi. Le industry consensus, as Ahrefs’ propre meta-balises guide (par Joshua Hardwick) puts il, est que “unless votre page est severely broken as a résultat de charset problèmes (qui est unlikely), le impact est going à être quite minimal.” Corriger il parce que broken texte est mauvais, pas parce que vous expect a classement bump.

Comment vérifier and fix it

A rapide diagnostic chemin quand vous suspect an encoding problem:

  • View source / DevTools. Confirmer <meta charset="utf-8"> exists et est le premier child de <head>. Dans DevTools, vérifier le Content-Type réponse header pour a charset valeur — si il disagrees avec le balise, le header wins et est votre probable culprit. Règle out a BOM aussi: c’est rarer, mais si présent il beats les deux le header et le balise.
  • Validators et robots d’exploration flag il. Le W3C validator et règle-based checkers (e.g. Rocket Validator’s “charset après le premier 1024 bytes” règle) va appel out a late or manquant declaration. Site audits dans Ahrefs Site Audit et Screaming Frog surface charset problèmes à travers a entier site.
  • Corriger le correct couche. Si le placement est incorrect, déplacer le balise à le top de head. Si le encoding est incorrect (le bytes themselves ne sont pas UTF-8, or le header sends a conflicting charset), fixing le meta balise alone ne va pas aider — vous ont à re-encode le fichier as UTF-8 et/or correct le serveur’s Content-Type header donc le header et balise agree.

Le corriger est presque toujours trivial une fois vous avez identified qui couche est à fault. Ce est a stable, long-settled partie de le HTML spec — il y a aucun recent deprecation or plateforme-behavior modifier à track; le seulement evolving nuance est tooling increasingly checking placement, pas simplement presence.

Où ce sits

Le charset balise est un de le navigateur-facing head elements — comme le viewport balise, c’est à propos de rendu, pas classement, qui puts il dans a différent bucket depuis le SEO-active balises dans le meta-balises cluster (le titre element, le meta description, et le robots family). c’est adjacent à le internationalization fonctionner Je spend a lot de temps on: encoding est le couche underneath hreflang et multi-script contenu — hreflang indique Google qui langue/region version à servir, mais si le encoding est incorrect le texte dans que version est garbled regardless. Pour le complet map de head elements grouped par le job ils faire, voir le meta balises hub.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.