Hreflang fără greșeli pe site-uri RO/EN
Ghid practic de hreflang implementare: când ai nevoie, cum îl setezi corect pentru RO/EN, cum îl verifici și ce capcane să eviți (inclusiv canonicals și x-default).
x-default
către selectorul de limbă. Canonicalul rămâne pe aceeași limbă, fără „trimitere” la cealaltă versiune. Vrei verificare profesionistă? Fă o verificare hreflang în cadrul unui audit tehnic SEO.
Când ai nevoie de hreflang
- ai același conținut în limbi diferite (RO/EN)
- ai pagini echivalente (nu doar homepage-ul tradus)
- vrei ca Google să afișeze versiunea corectă în funcție de limbă
Dacă site-ul e doar în română, nu ai nevoie de hreflang.
Ce NU rezolvă hreflang
- nu rezolvă duplicate cauzate de parametri/filtre
- nu înlocuiește canonical sau redirect
- nu „traduce” conținutul absent (trebuie pagini reale în EN)
Structuri recomandate RO/EN
Variantă | Exemplu | Observații |
---|---|---|
Subfoldere | exemplu.ro/ro/ · exemplu.ro/en/ | Curat, ușor de menținut. Cel mai folosit. |
Subdomenii | ro.exemplu.ro · en.exemplu.ro | Bine, dar cere configurări extra. |
TLD-uri | exemplu.ro · example.com | Ok pentru branduri mari; logistic mai complex. |
Codurile corecte
- ro pentru română
- en (generic) pentru engleză. (Folosește en-GB sau en-US doar dacă vizezi specific.)
- x-default pentru pagina „neutră” (selector limbă / redirect automat).
Reguli de aur (simplu, fără jargon)
- Reciprocitate: dacă A indică spre B, B trebuie să indice înapoi spre A.
- Self-reference: include și pagina curentă cu propriul cod (ex.:
hreflang="ro"
pe versiunea RO). - 1-la-1: mapează pagini echivalente (nu toate spre homepage).
- Consistență URL: slash, https, litere mici — identic peste tot.
Unde pui hreflang
- în <head> (link alternate), sau
- în sitemap XML (mai ușor la site-uri mari)
- nu e nevoie în ambele; alege o singură metodă și ține-o consecventă
Exemplu HTML (homepage cu x-default)
<!-- https://exemplu.ro/ro/ -->
<link rel="alternate" hreflang="ro" href="https://exemplu.ro/ro/" />
<link rel="alternate" hreflang="en" href="https://exemplu.ro/en/" />
<link rel="alternate" hreflang="x-default" href="https://exemplu.ro/" />
Pe /en/
vei pune aceleași trei rânduri, cu href
-urile corespunzătoare.
Exemplu HTML (pagină serviciu echivalentă)
<!-- RO: /servicii-seo/ | EN: /en/seo-services/ -->
<link rel="alternate" hreflang="ro" href="https://exemplu.ro/servicii-seo/" />
<link rel="alternate" hreflang="en" href="https://exemplu.ro/en/seo-services/" />
Include și canonicalul propriu (vezi secțiunea de mai jos).
Exemplu în sitemap (două limbi + x-default)
<url>
<loc>https://exemplu.ro/ro/</loc>
<xhtml:link rel="alternate" hreflang="ro" href="https://exemplu.ro/ro/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://exemplu.ro/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://exemplu.ro/"/>
</url>
<url>
<loc>https://exemplu.ro/en/</loc>
<xhtml:link rel="alternate" hreflang="ro" href="https://exemplu.ro/ro/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://exemplu.ro/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://exemplu.ro/"/>
</url>
Folosește aceeași logică pentru fiecare pereche de pagini RO/EN.
Când preferi sitemap-ul
- ai multe pagini și vrei să eviți greșeli în șabloane
- ai CMS care deja generează xhtml:link corect (ex.: unele module pentru WordPress)
- vrei audit ușor: totul într-un singur fișier
Canonical & indexare (regula simplă)
- fiecare versiune are canonical către sine
- nu pune canonical RO → EN sau invers
- nu marca noindex paginile din pereche (altfel hreflang se ignoră)
<!-- pe /servicii-seo/ -->
<link rel="canonical" href="https://exemplu.ro/servicii-seo/" />
x-default — când îl folosești
- ai o pagină „neutră”:
/
cu selector de limbă sau geo-redirect - ai mai multe limbi și vrei „fallback” corect
- nu e obligatoriu, dar ajută la claritate
Greșeli frecvente (și cum le eviți)
- Canonical „încrucișat” (RO → EN): rupe semnalul de limbă.
- Lipsă reciprocitate: RO indică EN, dar EN nu „răspunde”.
- Cod greșit: ro-EN sau en_RO (folosește ro, en ori en-GB corect).
- URLuri inconsistente: http/https amestecat, slash lipsă, litere mari.
- Trimite spre 404 sau pagini noindex.
- Toate paginile trimit spre homepage (fără perechi 1-la-1).
WordPress: scurt și clar
- WPML / Polylang gestionează automat hreflang dacă legi corect traducerile.
- Verifică șablonul de canonical din Yoast/RankMath: să fie „self”.
- Asigură-te că permalinks sunt identice ca formă între RO/EN (cu/ fără slash final).
Checklist implementare (10 pași rapizi)
# | Pas | De ce contează |
---|---|---|
1 | Decide structura (subfoldere: /ro/ , /en/ ) | simplu de menținut, clar pentru utilizator |
2 | Fă lista perechilor RO ↔ EN (1-la-1) | evită trimiterea generică spre homepage |
3 | Setează canonical către sine pentru fiecare pagină | previne semnale amestecate |
4 | Adaugă link rel="alternate" hreflang în <head> sau în sitemap | alege o singură metodă |
5 | Adaugă x-default (dacă ai o pagină neutră) | fallback curat pentru utilizatori |
6 | Respectă reciprocitatea + self-reference | condiție de bază pentru ca semnalul să conteze |
7 | Verifică HTTP→HTTPS, slash, litere mici | consistență 100% a URL-urilor |
8 | Exclude paginile noindex din perechi | hreflang pe noindex e ignorat |
9 | Testează 5–10 perechi la întâmplare | cauți erori simple, gen 404 sau link lipsă |
10 | Monitorizează acoperirea în timp | corectezi rapid dacă apar pagini noi fără pereche |
Cum verifici în 2 minute (fără unelte speciale)
- Deschide pagina RO → click dreapta → „View source” → caută
hreflang
. - Verifică existența
ro
,en
(șix-default
, dacă e cazul). - Deschide linkul EN din tag și verifică că înapoi există RO.
- Asigură-te că
canonical
e către aceeași limbă.
Întrebări frecvente
„ro” sau „ro-RO”? „en” sau „en-GB”?
În majoritatea cazurilor e suficient ro și en. Adaugă regiunea (ex.: en-GB) doar dacă ai conținut/monedă/termeni specifici acelei piețe.
Trebuie să pun hreflang și în HTML, și în sitemap?
Nu. Alege o singură metodă și folosește-o consecvent. Ambele pot funcționa, dar dubleză munca și riscul de erori.
Ce fac dacă nu am traducere pentru o pagină?
Nu indica o „pereche” falsă. Scoate pagina din pereche până ai varianta tradusă sau leagă spre cea mai apropiată pagină relevantă și marchează doar limbile existente.
Am redirect automat după IP. Mai pun hreflang?
Da, și oferă mereu opțiunea de a schimba limba (buton vizibil). Redirectul agresiv poate deranja și strica indexarea.
Variază ancorele când trimiți către pagina de servicii (anti-canibalizare).