WCAG Başarı Kriterleri · Level A

WCAG 3.1.1: Sayfanın Dili

WCAG 3.1.1, her web sayfasının varsayılan insan dilinin programatik olarak belirlenebilmesini gerektirir; bu da öncelikle HTML öğesi üzerinde geçerli bir lang özniteliği ayarlayarak sağlanır. Bu, ekran okuyucular gibi yardımcı teknolojilerin içeriği doğru şekilde telaffuz etmesini sağlar ve bilişsel ve dil temelli engelleri olan kullanıcıların sayfayı anlamalarına yardımcı olur.

Bu Kuralın Anlamı

WCAG 3.1.1 — Sayfanın Dili, Anlaşılabilir ilkesinin altında Seviye A başarı ölçütüdür. Her web sayfasının birincil insan dilinin, yardımcı teknolojilerin programatik olarak algılayabileceği şekilde ortaya konmasını gerektirir. Uygulamada bu, neredeyse her zaman sayfanın <html> öğesi üzerine doğrudan geçerli bir lang özniteliği yerleştirmek anlamına gelir.

lang özniteliğinin değeri geçerli bir BCP 47 dil etiketi olmalıdır. BCP 47 etiketleri, birincil dil alt etiketinden (örneğin İngilizce için en, Türkçe için tr, Fransızca için fr) ve isteğe bağlı olarak tire ile ayrılmış bir bölge alt etiketinden oluşur (örneğin en-US, tr-TR veya pt-BR). Dil etiketi, sayfa içeriğinin yazıldığı baskın dili doğru şekilde yansıtmalıdır. Öncelikli olarak Türkçe yazılmış bir sayfa lang='tr' veya lang='tr-TR' olarak; İngilizce yazılmış bir sayfa ise lang='en' veya bölgesel bir varyant olarak bildirilmelidir.

Bir sayfa, <html> öğesi, değeri boş olmayan, sözdizimsel olarak geçerli bir BCP 47 dil etiketi olan ve sayfanın birincil dilini doğru şekilde tanımlayan bir lang özniteliği taşıdığında bu ölçütü geçer. Bir sayfa, lang özniteliği tamamen eksik olduğunda, değer boş olduğunda (lang='') veya değer tanınan bir BCP 47 dil etiketi olmadığında (örneğin tire yerine alt çizgi kullanılan lang='turkish' veya lang='en_US') kalır.

XML MIME türüyle sunulan XHTML sayfalarında hem lang özniteliği hem de XML ad alanı özniteliği xml:lang bulunmalı ve değerleri eşleşmelidir. İkisi arasındaki bir uyumsuzluk — örneğin lang='en' ile birlikte xml:lang='tr' — hem bu ölçütün hem de ilgili axe-core kuralı html-xml-lang-mismatch’in ihlali anlamına gelir.

WCAG açıkça bir istisna belirtir: sayfa tamamen dekoratifse, kasıtlı olarak algılanabilir bir dili olmayan bir CAPTCHA ise veya bütünüyle dilsel olmayan içerikten oluşuyorsa (örneğin yalnızca metin içermeyen bir görselden oluşan bir sayfa), belirlenebilir bir dile sahip olmayabilir. Ancak bu istisna dardır ve gerçek dünyadaki sayfaların büyük çoğunluğu, dil bildirimi gerektirecek kadar metin içerir.

Neden Önemlidir

Doğru bildirilmiş bir sayfa dilinin birincil faydalanıcıları, çoğunluğu kör veya ciddi derecede az gören olan ekran okuyucu kullanıcılarıdır. NVDA, JAWS ve VoiceOver gibi ekran okuyucular, uygun metin okuma (TTS) sesi ve telaffuz motorunu seçmek için lang özniteliğini kullanır. Türkçe kullanıcı, lang='tr' olarak doğru bildirilmiş bir sayfayı ziyaret ettiğinde ekran okuyucusu Türkçe bir TTS sesine geçer ve doğru Türkçe fonoloji, vurgu kalıpları ve diakritikleri uygular. Bu bildirim olmadan ekran okuyucu, kullanıcının sistem diline veya tamamen yanlış bir dile varsayılan olarak geçebilir; bu da içeriği anlaşılmaz hale getiren anlamsız bir telaffuz üretir.

Somut bir senaryo düşünün: görme engelli bir Türk vatandaşı, bir kamu kurumunun web sitesine bir resmi form indirmek için giriyor. Sitede lang özniteliği eksik. Kullanıcının NVDA kurulumu varsayılan olarak İngilizce bir TTS profilini kullanıyor. Türkçe kelimeler İngilizce fonolojiyle okunuyor — “şehir” veya “başvuru” gibi kelimeler tanınmaz hale geliyor. Kullanıcı, görsel yardım almadan formu dolduramıyor ve bu da dijital hizmetin amacını boşa çıkarıyor.

Bilişsel ve öğrenme güçlüğü olan kullanıcılar da fayda sağlar. Tarayıcılar, doğru çeviri önerileri sunmak için lang özniteliğini kullanır; disleksi olan bazı kullanıcılar, içeriği işlemeyi daha kolay buldukları bir dile dönüştürmek için tarayıcı tabanlı çeviri araçlarına güvenir. Yanlış veya eksik bir lang özniteliği, bu araçların kaynak dili yanlış tanımasına neden olur; bu da kötü çeviriler veya hiç çeviri önerisi sunulmaması ile sonuçlanır.

Dragon NaturallySpeaking gibi sesle kontrol yazılımlarına güvenen motor beceri kısıtlı kullanıcılar, yazılımın sayfanın dilini doğru yorumlamasına ve konuşulan komutları ekrandaki metinle eşleştirmesine ihtiyaç duyar. Yanlış tanımlanmış bir sayfa dili bu eşleştirmeyi bozar.

Erişilebilirliğin ötesinde somut SEO faydaları da vardır: arama motorları, bir sayfanın hedef dilini ve bölgesini belirlemek için lang özniteliğini birkaç sinyalden biri olarak kullanır; bu da yerelleştirilmiş arama sonuçlarının doğruluğunu artırır. Doğru dil etiketleme, yalnızca yardımcı teknoloji kullananlar için değil, tüm kullanıcılar için tarayıcı imla ve dilbilgisi denetimi özelliklerinin güvenilirliğini de artırır. Dünya Sağlık Örgütü’ne göre, dünya genelinde yaklaşık 2,2 milyar insanın bir tür görme bozukluğu vardır ve bunların önemli bir kısmı ekran okuyuculara güvenir — bu da doğru dil bildiriminin, mevcut en yüksek etkili ve en az çaba gerektiren erişilebilirlik iyileştirmelerinden biri olduğu anlamına gelir.

İlgili Axe-core Kuralları

  • html-has-lang — Bu kural, <html> öğesinin herhangi bir lang özniteliğine sahip olup olmadığını kontrol eder. lang özniteliğinin, belgenin başka bir yerinde görünüp görünmediğinden bağımsız olarak, kök <html> etiketinden tamamen eksik olduğu her sayfayı işaretler. Düzeltmesi tek bir öznitelik eklemesi olduğu için, bu en yaygın ve en etkili otomatik yakalamalardan biridir.
  • html-lang-valid — Bu kural, <html> öğesindeki lang özniteliğinin değerinin geçerli bir BCP 47 dil etiketi olup olmadığını kontrol eder. lang='turkish' (ISO 639-1 kodu tr yerine tam İngilizce adın kullanılması), lang='en_US' (tire yerine alt çizgi kullanılması) veya lang='xx' (atanmış dili olmayan bir yer tutucu) gibi tanınmayan dil kodu değerlerini işaretler. Var olan ancak geçersiz bir değer içeren bir lang özniteliği, yardımcı teknolojiler buna güvenilir şekilde tepki veremeyeceği için, eksik bir öznitelik kadar sorunludur.
  • html-xml-lang-mismatch — Bu kural, <html> öğesinde hem bir lang özniteliği hem de bir xml:lang özniteliği taşıyan XHTML sayfalarına özgüdür. İki özniteliğin farklı dil kodları belirttiği durumları işaretler — örneğin lang='en' ve xml:lang='tr'. Bu değerler çeliştiğinde, yardımcı teknolojiler ve XML işlemcileri çelişkili sinyaller alır ve öngörülemeyen şekilde davranabilir. Her iki değer de aynı birincil dil alt etiketini belirtmelidir.

Bu üç kural en yaygın programatik hataları kapsasa da, otomatik araçlar anlamsal doğruluğu doğrulayamaz — yani bildirilen dilin, sayfanın yazıldığı dille gerçekten eşleşip eşleşmediğini belirleyemezler. Tamamen Türkçe yazılmış ancak lang='en' bildiren bir sayfa, üç axe-core kuralının hepsini geçer; yine de bildirilen dil sayfanın gerçek birincil dilini yansıtmadığı için WCAG 3.1.1’i ihlal eder. Bu nedenle, bildirilen dilin doğru olduğunu teyit etmek için otomatik taramaya her zaman manuel inceleme eşlik etmelidir.

Nasıl Test Edilir

  1. axe DevTools veya Lighthouse ile otomatik tarama: Sayfayı Chrome veya Firefox’ta açın. Geliştirici Araçları’nı (F12) açın, axe DevTools paneline veya Lighthouse sekmesine gidin ve tam bir erişilebilirlik denetimi çalıştırın. Özellikle html-has-lang, html-lang-valid ve html-xml-lang-mismatch kuralları altındaki ihlallere bakın. Axe, <html> öğesini vurgular ve belirli hatayı açıklar. Lighthouse, benzer sorunları Erişilebilirlik kategorisi altında gösterir. İşaretlenen tüm ihlalleri ve önerilen düzeltmeleri not edin.
  2. Manuel kaynak incelemesi: Sayfa kaynağını görüntüleyin (çoğu tarayıcıda Ctrl+U) ve açılış <html> etiketini bulun. lang özniteliği içerdiğini, öznitelik değerinin geçerli bir BCP 47 etiketi olduğunu (IANA Language Subtag Registry’ye göre kontrol edin) ve sayfa içeriğinin yazıldığı dili doğru şekilde yansıttığını doğrulayın. XHTML sayfalarında, herhangi bir xml:lang özniteliğinin de lang ile aynı birincil dil alt etiketini taşıdığını doğrulayın.
  3. NVDA ve Firefox ile ekran okuyucu testi: NVDA’yı (ücretsiz, Windows) kurun ve sayfayı Firefox’ta açın. Sayfa başlığını okumak ve kullanılan TTS sesini dinlemek için NVDA+T tuşlarına basın. Sayfa Türkçe ise ses Türkçe bir TTS sesi olmalı ve Türkçe kelimeler doğru telaffuz edilmelidir. Türkçe içerikte İngilizce veya başka yanlış bir ses duyarsanız, lang özniteliği eksik veya yanlıştır. Aynı testi Chrome’da JAWS ile ve macOS’ta Safari’de VoiceOver ile tekrarlayın (VoiceOver’ı etkinleştirmek için Cmd+F5, ardından sayfaya gidin ve gövde metninin nasıl telaffuz edildiğini dinleyin).
  4. Tarayıcı dil algılama kontrolü: Sayfayı Chrome’da açın. Tarayıcının yerleşik çeviri çubuğuna bakın — Chrome, tarayıcı ayarlarına göre yabancı dilde olduğunu tespit ettiği sayfaları çevirmeyi teklif eder. Chrome sayfa dilini yanlış tanımlarsa veya tanımlaması gerekirken çeviri teklif etmezse, bu lang özniteliğinin yanlış veya eksik olduğuna dair pratik bir işarettir. Bu kesin bir erişilebilirlik testi değildir, ancak yararlı bir ikincil göstergedir.
  5. Anlamsal doğruluk kontrolü (yalnızca manuel): Sayfa içeriğini okuyun ve bildirilen lang değerinin sayfanın gerçek birincil diliyle eşleştiğini doğrulayın. Otomatik araçlar bu kontrolü yapamaz. Farklı URL’lerden farklı dil sürümleri sunan çok dilli sitelere özellikle dikkat edin — her URL’nin sayfası, tek bir küresel varsayılanı devralmak yerine kendi doğru dilini bildirmelidir.

Nasıl Düzeltilir

Eksik lang özniteliği — Yanlış

<!DOCTYPE html>
<html>
  <head>
    <meta charset='UTF-8'>
    <title>Başvuru Formu</title>
  </head>
  <body>
    <h1>Hoş Geldiniz</h1>
  </body>
</html>

Eksik lang özniteliği — Doğru

<!DOCTYPE html>
<html lang='tr'>
  <!-- lang='tr', ekran okuyuculara Türkçe bir TTS sesi kullanmalarını söyler -->
  <head>
    <meta charset='UTF-8'>
    <title>Başvuru Formu</title>
  </head>
  <body>
    <h1>Hoş Geldiniz</h1>
  </body>
</html>

Geçersiz lang özniteliği değeri — Yanlış

<!DOCTYPE html>
<html lang='turkish'>
  <!-- 'turkish' geçerli bir BCP 47 etiketi değildir; axe, html-lang-valid kuralını ihlal olarak işaretleyecektir -->
  <head>
    <title>Kurumsal Site</title>
  </head>
  <body>
    <p>Şirketimiz hakkında bilgi edinmek için buraya tıklayın.</p>
  </body>
</html>

Geçersiz lang özniteliği değeri — Doğru

<!DOCTYPE html>
<html lang='tr'>
  <!-- İngilizce 'turkish' kelimesi yerine ISO 639-1 iki harfli 'tr' kodunu kullanın -->
  <head>
    <title>Kurumsal Site</title>
  </head>
  <body>
    <p>Şirketimiz hakkında bilgi edinmek için buraya tıklayın.</p>
  </body>
</html>

XHTML xml:lang uyumsuzluğu — Yanlış

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' lang='en' xml:lang='tr'>
  <!-- lang ve xml:lang uyuşmuyor — html-xml-lang-mismatch ihlali -->
  <head><title>XHTML Sayfası</title></head>
  <body><p>İçerik burada.</p></body>
</html>

XHTML xml:lang uyumsuzluğu — Doğru

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
  'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' lang='tr' xml:lang='tr'>
  <!-- Hem lang hem de xml:lang 'tr' — tutarlı ve geçerli -->
  <head><title>XHTML Sayfası</title></head>
  <body><p>İçerik burada.</p></body>
</html>

Çok dilli bir sitede yanlış dil bildirimi — Yanlış

<!-- Sitenin İngilizce sürümü, ancak lang küresel olarak 'tr' olarak ayarlanmış -->
<html lang='tr'>
  <head><title>About Us</title></head>
  <body>
    <p>Welcome to our company. We specialize in accessible web solutions.</p>
  </body>
</html>

Çok dilli bir sitede yanlış dil bildirimi — Doğru

<!-- Her dil sürümü kendi doğru lang özniteliğini bildirir -->
<html lang='en'>
  <!-- Bu İngilizce sayfadır; /tr/ altındaki Türkçe sayfa lang='tr' bildirir -->
  <head><title>About Us</title></head>
  <body>
    <p>Welcome to our company. We specialize in accessible web solutions.</p>
  </body>
</html>

Yaygın Hatalar

  • Dilin BCP 47 kodu yerine tam İngilizce adını kullanmaklang='turkish', lang='english' veya lang='arabic' yazmak yerine doğru kodlar olan tr, en ve ar’yi kullanmak gerekir. Bu değerler yardımcı teknolojiler tarafından tanınmaz.
  • Bölge ayırıcısı olarak alt çizgi kullanmaklang='en_US' veya lang='tr_TR' yazmak yerine tire ile ayrılmış lang='en-US' ve lang='tr-TR' biçimlerini kullanmak gerekir. BCP 47 alt çizgi değil, tire gerektirir.
  • <html> yerine <body> üzerinde lang özniteliğini ayarlamaklang özniteliği, axe-core’un html-has-lang kuralını karşılamak ve yardımcı teknolojilere herhangi bir içeriği ayrıştırmadan önce ihtiyaç duydukları sayfa düzeyi dil bağlamını vermek için kök <html> öğesi üzerinde olmalıdır.
  • lang’i boş bir dize olarak bırakmaklang='' ayarlamak, çoğu yardımcı teknoloji tarafından eksik bir öznitelikle aynı şekilde değerlendirilir ve boş bir dize geçerli bir dil etiketi olmadığından html-has-lang tarafından işaretlenir.
  • Farklı bir dil projesinden bir şablon kopyalayıp lang özniteliğini güncellememek — İngilizce bir şablonun yeniden kullanıldığı ve <html> etiketindeki lang='en' değerinin hiçbir zaman lang='tr' olarak değiştirilmediği Türkçe geliştirme süreçlerinde çok yaygın bir sorundur.
  • Doğru lang özniteliğini bildirip sitenin yeni bir dil sürümü yayınlandığında bunu güncellememek — sunucu tarafı işleme kullanan çok dilli siteler, lang özniteliğinin paylaşılan bir yerleşim şablonunda tek bir değere sabitlenmesi yerine, her yerel ayar için dinamik olarak ayarlandığından emin olmalıdır.
  • Bir CMS’in veya framework’ün lang özniteliğini otomatik olarak doğru ayarladığını varsaymak — birçok CMS platformu (bazı WordPress, Joomla ve özel framework yapılandırmaları dahil) varsayılan olarak geçerli bir lang özniteliği ayarlamaz. Geliştiriciler bunun şablon düzeyinde doğrulanmasını sağlamalı, otomatik olarak halledildiğini varsaymamalıdır.
  • lang özniteliğini (HTML için) Content-Language HTTP başlığıyla karıştırmak — HTTP başlığı önbellekleme ve içerik müzakeresini etkiler, ancak ekran okuyucular tarafından kullanılmaz. WCAG 3.1.1 uyumu için doğru mekanizma, <html> üzerindeki belge içi lang özniteliğidir.
  • Farklı bir lehçeyi ima eden geçerli ama yanlış bir bölgesel alt etiket kullanmak — örneğin, Basitleştirilmiş Çince (zh-CN) ile yazılmış bir sayfada lang='zh-TW' (Geleneksel Çince, Tayvan) bildirmek, ekran okuyucunun yanlış ses profili ve telaffuz kuralları seçmesine neden olabilir.
  • Tek sayfa uygulamalarında (SPA) dinamik olarak enjekte edilen tam sayfa içerikte lang ayarlamayı unutmak — bir SPA, aynı belge kabuğu içinde birden fazla dilde içerik yükleyip lang özniteliğini güncellemezse, dil bölümleri arasında gezinirken kullanıcılar yeni içerik bölümleri için doğru TTS telaffuzunu alamaz.

Türkiye’nin Erişilebilirlik Mevzuatıyla İlişkisi

WCAG 3.1.1 Sayfanın Dili, 21 Haziran 2025’te 32933 sayılı Resmî Gazete’de yayımlanan 2025/10 sayılı Cumhurbaşkanlığı Genelgesi kapsamında Türkiye’de doğrudan yasal bağlayıcılığa sahiptir. Bu genelge, WCAG 2.2 ile uyumlu zorunlu web erişilebilirliği gerekliliklerini belirler ve kapsanan tüm kuruluşlar için asgari zorunlu standart olarak Seviye A uyumunu tanımlar.

Genelge, hem kamu hem de özel sektörde geniş bir yelpazedeki kuruluşları kapsar. Bakanlıklar, belediyeler, devlet üniversiteleri, kamu hastaneleri ve tüm merkezi ve yerel idare birimleri dahil olmak üzere kamu kurumları, genelgenin yayımlanmasından itibaren bir yıl içinde tam Seviye A uyumuna ulaşmakla yükümlüdür. Düzenleme kapsamındaki özel sektör kuruluşları için uyum süresi iki yıldır ve e-ticaret platformları, bankalar ve finans kuruluşları, özel hastaneler ve sağlık hizmeti sağlayıcıları, 200.000 veya daha fazla abonesi olan telekom operatörleri, seyahat acenteleri, özel ulaşım şirketleri ve Millî Eğitim Bakanlığı (MoNE) izniyle faaliyet gösteren özel okulları kapsar.

WCAG 3.1.1 bir Seviye A ölçütü olduğundan, genelge kapsamında yer alan her kuruluş için zorunlu asgari gereklilikler arasına girer. <html> öğesinde lang='tr' bildirmeyen — veya yanlış ya da geçersiz bir dil etiketi bildiren — bir Türk kamu kurumu web sitesi, yasal olarak zorunlu kılınmış bir standarda doğrudan aykırıdır. Bankalar ve e-ticaret platformları gibi özel sektör kuruluşları için de, uyum süresi içinde aynı hata bir düzenleyici ihlal teşkil eder.

Türk web ekipleri için pratik sonuç önemlidir: her sayfa şablonu, her CMS yerleşimi, her SPA kabuğu ve her dinamik olarak üretilen sayfa, kök HTML öğesinde geçerli bir lang='tr' (veya uygun varyant) bulunduğunu doğrulamak için denetlenmelidir. Bu yalnızca iyi uygulama önerisi değildir — 2025/10 sayılı Genelge uyarınca yasal bir yükümlülüktür. axe-core kuralları html-has-lang ve html-lang-valid bu hataların çoğunu otomatik olarak tespit edebildiğinden, uyum son tarihleri gelmeden önce bu sorunu belirlemenin ve düzeltmenin önünde teknik bir engel yoktur.

Genelge kapsamındaki kuruluşlar, WCAG 3.1.1 uyumunu birinci öncelikli iyileştirme maddesi olarak ele almalıdır: düzeltmesi en kolay ölçütlerden biridir (tek bir öğe üzerinde tek bir öznitelik), ancak her sayfanın erişilebilirliği üzerinde, özellikle de düzenlemenin haklarını doğrudan korumayı amaçladığı ekran okuyucu kullanıcıları için orantısız derecede büyük bir etkiye sahiptir.