Kalo te përmbajtja
SEO Analyzer

Meta

Deklarimi i kodimit (charset)

Deklarimi i kodimit të shenjave; pa të, shkronjat shqipe ë dhe ç shfaqen të prishura.

Çfarë është

<meta charset="utf-8"> i thotë shfletuesit se si t'i përkthejë bajtet e dokumentit në shkronja. Pa këtë deklarim shfletuesi merr me mend, zakonisht duke provuar një kodim të vjetër një-bajtësh.

Për tekstin anglisht gabimi është i padukshëm, sepse ASCII-ja përputhet. Për shqipen jo: ë, ç, Ë, Ç janë dy bajte në UTF-8 dhe të lexuara si një-bajtëshe kthehen në ë dhe ç.

Deklarimi duhet të rrijë brenda 1024 bajteve të parë të dokumentit, sepse shfletuesi vendos për kodimin para se të lexojë pjesën tjetër.

Pse ka rëndësi

Teksti i prishur e bën faqen të duket e braktisur, dhe vizitori largohet para se të lexojë çfarëdo. Në shqip kjo prek pothuajse çdo fjali.

Pasoja e dytë është e padukshme dhe më e rëndë: kur teksti lexohet gabim, çdo gjë e matur mbi të llogaritet gabim. Gjatësia e titullit, numri i fjalëve, dendësia e fjalëve kyçe dhe lexueshmëria maten mbi shkronja të shtrembëruara. Edhe motori i kërkimit e indekson faqen me ato shkronja — pra kërkimi për "çështje" nuk e gjen faqen që flet për çështje.

Të dhënat e formularëve vuajnë njësoj: emra dhe adresa të shkruara shqip ruhen të prishura në bazë dhe mbeten të tilla përgjithmonë.

Si rregullohet

Vendose si rreshtin e parë brenda <head>, para titullit:

<head>
  <meta charset="utf-8">
  <title>Çështje të hapura — Shembull</title>
</head>

Hapat:

  • Përdor UTF-8, jo ISO-8859-1 apo windows-1252. Këto të fundit nuk i mbajnë dot shkronjat shqipe.
  • Ruaj skedarët vërtet në UTF-8, pa BOM. Deklarimi është premtim; nëse bajtet janë të një kodimi tjetër, premtimi gënjen.
  • Shto edhe kokën HTTP, që ka përparësi ndaj etiketës: `` Content-Type: text/html; charset=utf-8 ``
  • Kontrollo bazën e të dhënave dhe lidhjen me të. Një tabelë latin1 i prish shkronjat pavarësisht se çfarë thotë HTML-ja.
  • Mos vendos asnjë bajt jo-ASCII para deklarimit — as në një koment, as në një shabllon.

Si e mat ky mjet

MetaAnalyzer::analyzeCharset() (services/MetaAnalyzer.php:156) lexon //meta[@charset]/@charset dhe, nëse nuk e gjen, bie te //meta[@http-equiv="Content-Type"]/@content duke nxjerrë charset= me shprehje të rregullt. Tri dalje: mungon (:171, paralajmërim), ekziston por nuk është utf-8 (:173, informativ), është utf-8 (kaluar pa konstatim).

Çfarë NUK e mat

Kontrolli e sheh deklarimin, jo bajtet. Nuk verifikon nëse dokumenti është vërtet i koduar ashtu si thotë, dhe nuk kontrollon nëse deklarimi rri brenda 1024 bajteve të parë.

Ekziston edhe një kurth më i thellë, i matur dhe i regjistruar: kur bajtet jo-ASCII vijnë para etiketës <meta charset>, biblioteka që analizon HTML-në e vendos kodimin nga ato bajte dhe e shpërfill etiketën që vjen më pas. Roja në services/SeoAnalyzer.php:622 e sheh etiketën dhe prandaj nuk e shton kokën shpëtimtare — pikërisht në rastin ku do të duhej. Rezultati: gjithë analiza e tekstit të asaj faqeje bëhet mbi shkronja të prishura, dhe as ky kontroll nuk e raporton. Detajet te MASTER_PLAN/audits/61-ANALIZUESIT-INVENTAR.md §4.6.

Mospërputhje midis tekstit të analizuesit dhe matjes

Kjo faqe ndjek matjen, jo tekstin që prodhon analizuesi.
Teksti i analizuesitÇfarë ndodhSi u matBurimi
(asnjë konstatim — dështimi është i heshtur)Roja e sheh etiketën dhe nuk e shton kokën shpëtimtare, pikërisht në rastin ku ajo duhej.Mbi 31-charset-pas-shenjave-joascii.html: 'Përshëndetje — çështje kodimi' u lexua si mojibake; gjatësia e titullit, numri i fjalëve dhe lexueshmëria u matën mbi tekstin e shtrembëruar.MASTER_PLAN/audits/61-ANALIZUESIT-INVENTAR.md §4.6services/SeoAnalyzer.php:622

Kodi që e kryen matjen

  • services/MetaAnalyzer.php:156MetaAnalyzer::analyzeCharset
  • services/SeoAnalyzer.php:622SeoAnalyzer::parseHtml

Standardi