Skip to content

Producție: SEO — meta pe pagină, sitemap, 404 real și canonice

Vitalie requested to merge prod-seo into main

Pachetul de SEO pentru hyperice.md, luat ca CONȚINUT de pe develop (cherry-pick, nu merge: istoriile au divergit, iar un merge direct ar da conflicte pe aceleași modificări venite pe două drumuri).

Verificat: după cherry-pick, git diff origin/develop arată o singură linie — eticheta de runner a jobului deploy:production, care e diferită pe main intenționat (hyperice-prod-shell). În rest, ramura asta e, la nivel de fișiere, exact develop.

Ce intră

Meta pe fiecare pagină. Până acum index.html avea un singur titlu și o singură descriere, statice, în engleză, pentru tot site-ul: toate produsele, colecțiile și paginile de terapie arătau identic în Google. Acum fiecare pagină are titlu, descriere, canonical, Open Graph și limba documentului. Paginile statice își iau textele din chei noi seo.* (RO/RU/EN); produsele, colecțiile și articolele din catalog. Comanda, confirmarea, contul și ecranele „nu am găsit" sunt noindex.

404 real. Orice adresă inexistentă răspundea 200 cu shell-ul aplicației — ce raportează Search Console ca „soft 404". nginx știe acum ce căi sunt rute; restul primesc 404, tot cu ecranul aplicației.

Canonice și 301. 17 aliasuri (forma singulară de produs, adresele /pages/…, slugurile românești ale paginilor legale, punctele de intrare în magazin) devin redirecturi permanente spre pagina canonică, în loc de a doua copie a ei. Rulează după try_files, deci fișierele reale de sub /products/ rămân fișiere.

Sitemap și robots. /sitemap.xml e construit de backend din ce e publicat și expus de nginx la adresa cerută de crawlere. robots.txt e generat, ca linia Sitemap: să poarte hostul care l-a servit; doar hosturile de producție rămân deschise crawlerelor, fiindcă stiva de develop servea același catalog pe alt domeniu.

Curățenie de repo. Cele 41 de fișiere de mediu local scoase pe develop (e985838) ies și de pe main, ca cele două ramuri să nu mai difere prin ele.

Bug reparat pe drum

Cardul cadou din grila magazinului trimitea la /product/gift-card, un handle care nu există în catalog — pe producție API-ul răspunde 404 pe el. Toate linkurile interne trec pe forma canonică /products/<handle>, iar acolo ruta duce la pagina de carduri cadou.

Verificări

  • 134 de teste frontend și 381 backend, verzi pe ramura asta; ambele typecheck-uri curate.
  • Build-ul imaginii rulează acum nginx -t, deci o configurație stricată pică în CI, nu pe server.
  • Probat pe dev, după deploy: /sitemap.xml → 200 application/xml cu 128 de url-uri pe hostul corect; robots.txt cu politica per host; 8 aliasuri → 301 (inclusiv cu query string păstrat); 3 căi inexistente → 404; fișierele reale de sub /products/ → 200; meta corecte în browser pe o pagină de produs.
  • Un test nou pică dacă rutele din App.tsx și harta din nginx.conf se despart.

După merge

Pipeline-ul PORNEȘTE singur: .gitlab-ci.yml nu e în diff, deci regula care sare pipeline-ul nu se aplică. deploy:production nu e manual, deci merge-ul duce direct în producție.

Nimic de apăsat după: nu se schimbă date în bază, deci seed:live nu e necesar, iar PUBLIC_SITE_URL e deja setat pe stivă.

Refs #2

Merge request reports