<!-- De pus în <head>-ul paginii de pe site-ul .ro -->
<link rel="canonical" href="https://exemplu.ro/pagina-produs" />
<link rel="alternate" hreflang="ro" href="https://exemplu.ro/pagina-produs" />
<link rel="alternate" hreflang="en" href="https://exemplu.com/product-page" />
<link rel="alternate" hreflang="x-default" href="https://exemplu.com/product-page" />
<!-- De pus în <head>-ul paginii corespondente de pe .com -->
<link rel="canonical" href="https://exemplu.com/product-page" />
<link rel="alternate" hreflang="ro" href="https://exemplu.ro/pagina-produs" />
<link rel="alternate" hreflang="en" href="https://exemplu.com/product-page" />
<link rel="alternate" hreflang="x-default" href="https://exemplu.com/product-page" />Am văzut zeci de implementări de hreflang făcute complet după ureche și aproape toate aveau aceeași problemă: Google le ignora total. Dacă ai un site pe .ro în limba română și o versiune pe .com în engleză, nu e suficient să pui două link-uri în footer și să speri că motoarele de căutare se prind singure de șmecherie.
Astăzi îți arăt cum să faci asta ca la carte. M-am lovit direct de problema asta la un magazin online cu vreo 12.000 de produse indexate, unde am dublat traficul organic pe extern în doar trei luni după ce am reparat mizeria din cod.
Regula de aur pe care o uită toți: Reciprocitatea
Cea mai mare greșeală pe care o văd în producție este lipsa reciprocității. Nu poți să pui tag-ul hreflang doar pe pagina în română către cea în engleză. Trebuie ca și pagina în engleză să trimită înapoi către cea în română. E ca un follow-back pe Instagram: dacă nu e reciproc, Google zice „pas” și ignoră complet directivele.
În plus, fiecare pagină trebuie să aibă un tag autoreferențial. Adică pagina în română trebuie să conțină un tag care arată tot spre ea însăși, pe lângă cel care arată spre versiunea .com.
O altă problemă de care m-am lovit des: codurile de limbă și țară. Folosiți mereu formatul ISO 639-1 pentru limbă și ISO 3166-1 Alpha-2 pentru regiune. Am văzut en-UK scris în loc de en-GB de mi s-a aplecat. Google pur și simplu ignoră tot blocul de cod dacă ai o singură sintaxă greșită.
Trade-off: Tag-uri în HTML vs XML Sitemap
Aici avem de făcut o alegere destul de importantă. Putem pune tag-urile direct în head-ul paginii HTML sau le putem injecta în sitemap-ul XML. Ambele metode funcționează, dar au avantaje și dezavantaje clare:
- Tag-urile în HTML (în head): Sunt extrem de ușor de implementat și de verificat cu un simplu „View Source”. Totuși, dacă site-ul tău crește și ajungi la 10-15 limbi, vei adăuga câte 15 linii de cod în head-ul fiecărei pagini. Am măsurat asta la un proiect mare și am economisit cam 8% din greutatea HTML-ului (și implicit timp de descărcare) doar după ce am mutat toată logica de hreflang din pagină în sitemap-ul XML.
- Sitemap-ul XML: Păstrează codul HTML curat, dar e mult mai greu de generat din backend și devine un coșmar la debugging dacă baza de date nu e perfect sincronizată.
Pentru scenariul nostru simplu, .ro (română) și .com (engleză globală), tag-urile în head sunt perfecte și nu încarcă DOM-ul inutil.
De ce avem nevoie de x-default?
Tag-ul x-default este plasa ta de siguranță. El îi spune motorului de căutare unde să trimită un utilizator care nu vorbește nici româna, nici engleza configurată regional (de exemplu, un user din Brazilia). În cazul nostru, cel mai logic este ca versiunea globală .com să fie definită ca fallback universal.
Cum verifici dacă ai făcut treabă bună?
Nu te baza niciodată pe ideea că „pare ok în cod”. Google Search Console îți va arăta erorile, dar raportul ăla se actualizează o dată la câteva zile, iar tu vrei să știi acum dacă ai dat deploy la ceva greșit.
Când dau deploy la o astfel de structură, folosesc două instrumente:
- Screaming Frog: Varianta gratuită e arhi-suficientă pentru site-uri mici. Are o secțiune dedicată de Hreflang care îți arată instant dacă ai pagini fără tag autoreferențial sau dacă lipsește reciprocitatea.
- Validatorul tehnic de la Merkle: Bagi URL-ul direct în browser și îți parsează instant toate tag-urile, verificând codurile de țară.
Tu cum gestionezi treaba asta? Mergi pe plugin-uri din CMS sau preferi să generezi sitemap-uri custom din codul tău de backend?