Producție: HTML real din server + limba în URL (SEO etapele 5-6)
Pachetul de randare din server plus limba în URL, luat ca CONȚINUT de pe
develop (cherry-pick, nu merge: istoriile au divergit). Verificat: după
cherry-pick, git diff origin/develop e gol — ramura asta e, la nivel de
fișiere, exact develop.
De ce
Măsurat pe producție înainte: /products/hypervolt-3 livra 2594 de octeți —
titlul generic al site-ului, fără canonical, fără date structurate și zero
cuvinte în corp. Google randează aplicația și vede pagina reală; Seobility,
Bing și fiecare previzualizare de link de pe Facebook, WhatsApp sau Telegram
citesc doar HTML, iar pentru ele magazinul nu avea conținut deloc.
Ce intră
HTML real din server. Backendul randează pagina inițială — deține deja
datele, din aceleași interogări a construit sitemap-ul. Fiecare adresă pleacă
cu titlul și descrierea ei, canonical, Open Graph și JSON-LD: Organization pe
pagina principală, Product cu preț și disponibilitate, BreadcrumbList.
Conținutul paginii și linkurile reale stau într-un bloc <noscript>, ca să nu
clipească text nestilizat până pornește React.
Nu e randare completă pe server: React pornește și desenează pagina exact ca până acum.
Limba în URL. Româna pe rădăcină, rusa și engleza cu prefix. Routerul
citește limba din adresă și pornește cu basename, deci toate linkurile
paginii capătă prefixul fără ca vreun to= să fie modificat. hreflang
reciproc pe cele trei, plus x-default spre română. Sitemap-ul listează fiecare
pagină în toate trei: 384 de url-uri în loc de 128.
Adresele publicate până acum rămân valabile — devin versiunea românească.
Riscul principal, găsit și reparat înainte de acest MR
Pe dev, cu randarea activă, pagina de produs în rusă își desena antetul și
subsolul și nimic între ele: antetele de securitate ale API-ului veneau cu
pagina, iar default-src 'self' bloca toate apelurile către API — care stă pe
alt domeniu în fiecare mediu (api-hyperice.vevdev.com, api.hyperice.md).
Ar fi doborât magazinul de producție. Plasa de siguranță nu putea prinde asta: randarea reușea, browserul refuza ce venea după. Pagina randată pleacă acum fără acel antet; API-ul îl păstrează. Două teste țin linia.
Nu HTML-ul a prins-o — arăta impecabil — ci verificarea vizuală în browser.
Verificat
- 402 teste backend și 147 frontend, verzi pe această ramură; backendul rulat pe bază de test ștearsă, ca în CI.
-
nginx -ttrecut; build-ul imaginii îl rulează la rândul lui. - Pe dev, după deploy: pagina de produs în rusă se încarcă complet, cu preț și
buton de comandă; cele trei limbi au canonical propriu și 4 alternative;
301-urile păstrează limba;
/ru/adminși/fr/aboutdau 404; sitemap 384 de url-uri;robots.txtneatins. - Control înainte de acest MR: CSP-ul scos,
FRONTEND_ORIGINimplicithttp://frontend(numele serviciului în AMBELE fișiere compose), frontendul așteaptă backendul sănătos, hosturile de producție rămânAllowîn robots.
După merge
Pipeline-ul pornește singur și deploy:production nu e manual, deci merge-ul
duce direct pe hyperice.md. Nimic de apăsat după: nu se schimbă date în bază.
De verificat imediat după deploy, în browser, nu doar în HTML: o pagină de
produs se încarcă complet, robots.txt rămâne Allow: /, cele trei limbi
răspund.
Datorie notată
Aplicația nu are o politică de securitate a conținutului proprie, nici înainte nici acum. Una scrisă pentru ea ar fi un câștig real, dar e lucrare separată.
Refs #2