{"id":164066,"date":"2026-01-09T09:00:00","date_gmt":"2026-01-09T08:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/internazionalizzazione-html-lang-dir-multilingua\/"},"modified":"2026-01-09T09:00:00","modified_gmt":"2026-01-09T08:00:00","slug":"internazionalizzazione-html-lang-dir-multilingua","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/en\/internazionalizzazione-html-lang-dir-multilingua\/","title":{"rendered":"Internazionalizzazione in HTML: lang, dir e Contenuti Multilingua"},"content":{"rendered":"<p style=\"text-align: justify;\">In un web sempre pi\u00f9 globale, creare siti che funzionino correttamente per utenti di lingue e culture diverse \u00e8 una necessit\u00e0, non un lusso. L&#8217;<strong>internazionalizzazione<\/strong> (spesso abbreviata in i18n) inizia dal codice HTML, con attributi e elementi progettati per gestire lingue diverse, direzioni di scrittura differenti e set di caratteri universali. In questa guida vedremo tutti gli strumenti HTML disponibili per creare siti veramente multilingua e accessibili a un pubblico globale.<\/p>\n<h2>L&#8217;Attributo lang: Dichiarare la Lingua dei Contenuti<\/h2>\n<p style=\"text-align: justify;\">L&#8217;attributo <code>lang<\/code> \u00e8 il meccanismo fondamentale in HTML per dichiarare la <strong>lingua del contenuto<\/strong>. Deve essere sempre presente sull&#8217;elemento <code>&lt;html&gt;<\/code> per dichiarare la lingua principale del documento:<\/p>\n<pre><code>&lt;html lang=&quot;it&quot;&gt;\n  &lt;head&gt;\n    &lt;title&gt;Pagina in italiano&lt;\/title&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;p&gt;Questo contenuto &egrave; in italiano.&lt;\/p&gt;\n    &lt;blockquote lang=&quot;en&quot;&gt;\n      &lt;p&gt;This quote is in English.&lt;\/p&gt;\n    &lt;\/blockquote&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">L&#8217;attributo <code>lang<\/code> pu\u00f2 essere applicato a qualsiasi elemento HTML per indicare un cambio di lingua all&#8217;interno del documento. Nell&#8217;esempio sopra, il documento \u00e8 in italiano ma contiene una citazione in inglese. Questa dichiarazione ha effetti pratici importanti: gli <strong>screen reader<\/strong> cambiano automaticamente la voce sintetica per pronunciare il testo nella lingua corretta, i <strong>browser<\/strong> possono offrire la traduzione automatica in modo pi\u00f9 preciso, i <strong>motori di ricerca<\/strong> comprendono meglio la lingua del contenuto e le regole CSS come <code>hyphens: auto<\/code> applicano la sillabazione corretta per ogni lingua.<\/p>\n<p style=\"text-align: justify;\">I codici lingua seguono lo standard <strong>BCP 47<\/strong>. I pi\u00f9 comuni sono codici a due lettere come <code>it<\/code> (italiano), <code>en<\/code> (inglese), <code>fr<\/code> (francese), <code>de<\/code> (tedesco), <code>es<\/code> (spagnolo), ma possono includere varianti regionali come <code>en-US<\/code> (inglese americano), <code>en-GB<\/code> (inglese britannico), <code>pt-BR<\/code> (portoghese brasiliano) o <code>zh-Hans<\/code> (cinese semplificato). La specificit\u00e0 \u00e8 importante: <code>en-GB<\/code> indica al browser di usare la sillabazione e le regole tipografiche dell&#8217;inglese britannico, che differiscono da quelle americane.<\/p>\n<h2>L&#8217;Attributo dir e il Testo Bidirezionale<\/h2>\n<p style=\"text-align: justify;\">Non tutte le lingue si scrivono da sinistra a destra. L&#8217;arabo, l&#8217;ebraico, il persiano e l&#8217;urdu si scrivono da <strong>destra a sinistra<\/strong> (RTL, Right-To-Left). L&#8217;attributo <code>dir<\/code> indica al browser la direzione di scrittura del testo:<\/p>\n<pre><code>&lt;html lang=&quot;ar&quot; dir=&quot;rtl&quot;&gt;\n  &lt;body&gt;\n    &lt;h1&gt;\u0645\u0631\u062d\u0628\u0627 \u0628\u0627\u0644\u0639\u0627\u0644\u0645&lt;\/h1&gt;\n    &lt;p&gt;\u0647\u0630\u0627 \u0646\u0635 \u0628\u0627\u0644\u0644\u063a\u0629 \u0627\u0644\u0639\u0631\u0628\u064a\u0629.&lt;\/p&gt;\n    &lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;This paragraph is in English.&lt;\/p&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">I valori possibili sono: <code>ltr<\/code> (left-to-right, default), <code>rtl<\/code> (right-to-left) e <code>auto<\/code> (il browser determina la direzione in base al contenuto). L&#8217;impostazione <code>dir=\"rtl\"<\/code> non si limita a invertire l&#8217;allineamento del testo: inverte anche il layout della pagina, la direzione dello scroll, l&#8217;ordine delle colonne nelle tabelle e il posizionamento di elementi come le icone di chiusura nelle finestre di dialogo.<\/p>\n<p style=\"text-align: justify;\">La sfida maggiore si presenta con il <strong>testo bidirezionale<\/strong> (bidi), dove contenuti in lingue con direzioni opposte coesistono nello stesso paragrafo. L&#8217;algoritmo bidirezionale Unicode del browser gestisce automaticamente la maggior parte dei casi, ma a volte servono interventi espliciti.<\/p>\n<h2>Elementi BDO e BDI per Testo Misto<\/h2>\n<p style=\"text-align: justify;\">HTML offre due elementi specifici per gestire il testo bidirezionale. L&#8217;elemento <code>&lt;bdo&gt;<\/code> (Bidirectional Override) <strong>sovrascrive<\/strong> l&#8217;algoritmo bidirezionale, forzando una direzione specifica:<\/p>\n<pre><code>&lt;!-- Forzare il testo da destra a sinistra --&gt;\n&lt;p&gt;La parola &lt;bdo dir=&quot;rtl&quot;&gt;HELLO&lt;\/bdo&gt; scritta al contrario.&lt;\/p&gt;\n&lt;!-- Risultato: La parola OLLEH scritta al contrario. --&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">L&#8217;elemento <code>&lt;bdi&gt;<\/code> (Bidirectional Isolation) <strong>isola<\/strong> un pezzo di testo dal contesto bidirezionale circostante, permettendo all&#8217;algoritmo Unicode di analizzarlo indipendentemente. Questo \u00e8 particolarmente utile quando si inseriscono dati generati dagli utenti (nomi, commenti) che potrebbero essere in qualsiasi lingua:<\/p>\n<pre><code>&lt;ul&gt;\n  &lt;li&gt;Primo classificato: &lt;bdi&gt;\u0645\u062d\u0645\u062f&lt;\/bdi&gt; - 95 punti&lt;\/li&gt;\n  &lt;li&gt;Secondo classificato: &lt;bdi&gt;Marco&lt;\/bdi&gt; - 87 punti&lt;\/li&gt;\n  &lt;li&gt;Terzo classificato: &lt;bdi&gt;\u05e9\u05e8\u05d4&lt;\/bdi&gt; - 82 punti&lt;\/li&gt;\n&lt;\/ul&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Senza <code>&lt;bdi&gt;<\/code>, un nome in arabo o ebraico potrebbe confondere l&#8217;algoritmo bidirezionale, causando il riordino errato del testo circostante (come il punteggio che appare nel posto sbagliato). Con <code>&lt;bdi&gt;<\/code>, ogni nome viene isolato e la frase circostante mantiene il suo ordine corretto.<\/p>\n<h2>Hreflang per la SEO Multilingua<\/h2>\n<p style=\"text-align: justify;\">Per siti disponibili in pi\u00f9 lingue, il tag <code>&lt;link rel=\"alternate\" hreflang=\"xx\"&gt;<\/code> indica ai motori di ricerca le <strong>versioni alternative della stessa pagina<\/strong> in lingue diverse. Questo \u00e8 cruciale per la SEO internazionale, poich\u00e9 evita problemi di contenuto duplicato e aiuta Google a servire la versione linguistica corretta nei risultati di ricerca:<\/p>\n<pre><code>&lt;link rel=\"alternate\" hreflang=\"it\" href=\"https:\/\/esempio.it\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"en\" href=\"https:\/\/esempio.it\/en\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"fr\" href=\"https:\/\/esempio.it\/fr\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"de\" href=\"https:\/\/esempio.it\/de\/\"&gt;\n&lt;link rel=\"alternate\" hreflang=\"x-default\" href=\"https:\/\/esempio.it\/en\/\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Il valore speciale <code>x-default<\/code> indica la pagina da mostrare quando la lingua dell&#8217;utente non corrisponde a nessuna delle versioni disponibili. \u00c8 fondamentale che ogni pagina referenzi <strong>tutte<\/strong> le versioni alternative, inclusa se stessa, e che la relazione sia bidirezionale (la pagina italiana referenzia quella inglese e viceversa). Per una guida completa sull&#8217;ottimizzazione SEO delle pagine HTML, consultate il nostro articolo su <a href=\"https:\/\/gtechgroup.it\/blog\/en\/html-seo-strutturare-pagine-motori-ricerca\/\">HTML e SEO<\/a>.<\/p>\n<h2>Charset UTF-8 e Configurazione Multilingua<\/h2>\n<p style=\"text-align: justify;\">La corretta codifica dei caratteri \u00e8 il prerequisito fondamentale per qualsiasi sito multilingua. Il <code>&lt;meta charset=\"UTF-8\"&gt;<\/code> deve essere il <strong>primo elemento nel &lt;head&gt;<\/strong>, idealmente entro i primi 1024 byte del documento:<\/p>\n<pre><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;it&quot;&gt;\n&lt;head&gt;\n  &lt;meta charset=&quot;UTF-8&quot;&gt;\n  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n  &lt;title&gt;Sito Multilingua&lt;\/title&gt;\n&lt;\/head&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\"><strong>UTF-8<\/strong> supporta praticamente tutti i sistemi di scrittura del mondo: latino, cirillico, greco, arabo, ebraico, cinese, giapponese, coreano, devanagari e migliaia di altri caratteri, inclusi emoji. Non c&#8217;\u00e8 ragione per utilizzare codifiche diverse da UTF-8 nel web moderno. Codifiche come ISO-8859-1 o Windows-1252 supportano solo un sottoinsieme limitato di caratteri e possono causare la comparsa dei caratteri &#8220;mojibake&#8221; (testo illeggibile con simboli casuali) quando il contenuto include caratteri non supportati.<\/p>\n<p style=\"text-align: justify;\">Per la configurazione pratica di un sito multilingua, oltre all&#8217;HTML \u00e8 necessario che anche il server invii l&#8217;header HTTP <code>Content-Type: text\/html; charset=UTF-8<\/code> e che il database utilizzi la codifica UTF-8 (preferibilmente <code>utf8mb4<\/code> in MySQL per supportare tutti i caratteri Unicode, inclusi gli emoji). La <strong>content negotiation<\/strong> \u2014 il meccanismo con cui il server sceglie automaticamente la lingua in base all&#8217;header <code>Accept-Language<\/code> del browser \u2014 \u00e8 un&#8217;opzione aggiuntiva ma non dovrebbe mai essere l&#8217;unico meccanismo: l&#8217;utente deve sempre poter scegliere manualmente la lingua preferita.<\/p>\n<p style=\"text-align: justify;\">Hai bisogno di aiuto con l&#8217;internazionalizzazione del tuo sito web? <strong>G Tech Group<\/strong> offre servizi di sviluppo web professionale e consulenza tecnica. Contattaci a <strong>support@gtechgroup.it<\/strong> o via WhatsApp al <strong>0465 84 62 45<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>In un web sempre pi\u00f9 globale, creare siti che funzionino correttamente per utenti di lingue e culture diverse \u00e8 una necessit\u00e0, non un lusso. L&#8217;internazionalizzazione&hellip;<\/p>","protected":false},"author":2,"featured_media":164246,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"Internazionalizzazione in HTML: lang, dir e Contenuti Multilingua","_seopress_titles_desc":"Guida completa all'internazionalizzazione HTML: attributo lang, dir per testo bidirezionale, hreflang, charset UTF-8 e configurazione di siti multilingua.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"1246","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"internazionalizzazione HTML, attributo lang, dir HTML, multilingua, i18n web","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[{"_seopress_pro_rich_snippets_type":"custom","_seopress_pro_rich_snippets_custom":"<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"HowTo\",\"name\":\"Internazionalizzazione in HTML: lang, dir e Contenuti Multilingua\",\"description\":\"In un web sempre pi\u00f9 globale, creare siti che funzionino correttamente per utenti di lingue e culture diverse \u00e8 una necessit\u00e0, non un lusso. L\u2019internazionalizzazione\u2026\",\"step\":[{\"@type\":\"HowToStep\",\"position\":1,\"name\":\"L'Attributo lang: Dichiarare la Lingua dei Contenuti\",\"text\":\"L'attributo lang \u00e8 il meccanismo fondamentale in HTML per dichiarare la lingua del contenuto. Deve essere sempre presente sull'elemento  per dichiarare la lingua principale del documento:\"},{\"@type\":\"HowToStep\",\"position\":2,\"name\":\"L'Attributo dir e il Testo Bidirezionale\",\"text\":\"Non tutte le lingue si scrivono da sinistra a destra. L'arabo, l'ebraico, il persiano e l'urdu si scrivono da destra a sinistra (RTL, Right-To-Left). L'attributo dir indica al browser la direzione di scrittura del testo:\"},{\"@type\":\"HowToStep\",\"position\":3,\"name\":\"Elementi BDO e BDI per Testo Misto\",\"text\":\"HTML offre due elementi specifici per gestire il testo bidirezionale. L'elemento  (Bidirectional Override) sovrascrive l'algoritmo bidirezionale, forzando una direzione specifica:\"},{\"@type\":\"HowToStep\",\"position\":4,\"name\":\"Hreflang per la SEO Multilingua\",\"text\":\"Per siti disponibili in pi\u00f9 lingue, il tag  indica ai motori di ricerca le versioni alternative della stessa pagina in lingue diverse. Questo \u00e8 cruciale per la SEO internazionale, poich\u00e9 evita problemi di contenuto duplicato e aiuta Google a servire la versione linguistica corretta nei risultati di ricerca:\"},{\"@type\":\"HowToStep\",\"position\":5,\"name\":\"Charset UTF-8 e Configurazione Multilingua\",\"text\":\"La corretta codifica dei caratteri \u00e8 il prerequisito fondamentale per qualsiasi sito multilingua. Il  deve essere il primo elemento nel , idealmente entro i primi 1024 byte del documento:\"}],\"image\":\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/01\/html-43-i18n.jpg\"}<\/script>"}],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[1246],"tags":[1551,787],"class_list":["post-164066","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html","tag-accessibilita-web","tag-sviluppo-web"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/posts\/164066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/comments?post=164066"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/posts\/164066\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/media\/164246"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/media?parent=164066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/categories?post=164066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/en\/wp-json\/wp\/v2\/tags?post=164066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}