Skip to content

Datele structurate nu mai trimit Google la imagini inexistente

Vitalie requested to merge 31_jsonld-image-path into main

Blocul JSON-LD Product numea poza ca ${origin}${prefix}${cale}, deci o pagină de produs în engleză sau rusă anunța https://hyperice.md/en/products/shop/hypervolt-3.png. nginx nu are niciun director /en: adresa dă 404, Google nu construiește rezultat îmbogățit de produs fără o imagine pe care o poate lua, și două limbi din trei își pierdeau cardul de produs din căutare.

Ce s-a schimbat

Un singur helper făcea două treburi. absolute a devenit pageUrl și fileUrl — redenumit, nu completat cu un al doilea helper, pentru că absolute(product.image) se citește ca fiind corect, și exact așa a intrat greșeala.

Auditul tuturor apariţiilor, cerut de issue:

Linie Apel Fel Decizie
213 pageUrl(canonicalPath) — produs, alimentează offers.url și ultima firimitură adresă de pagină păstrează prefixul
229 fileUrl(product.image) cale de fișier prefix scos — defectul raportat
264 pageUrl(canonicalPath) — colecție adresă de pagină păstrează prefixul
302, 303 pageUrl(...) — index blog și articol adresă de pagină păstrează prefixul

prefix nu mai apare nicăieri altundeva în backend/src unde s-ar putea confunda cele două înțelesuri. og:image din render-page.ts:138 era deja corect în toate trei limbile — verificat, lăsat în pace. Sitemap-ul emite doar adrese de pagini; e-mailurile de comandă nu folosesc prefix.

Un al doilea defect, din același audit, inclus aici

pageUrl trece acum prin localizePath în loc să lipească prefixul, deci coincide octet cu octet cu canonicul pe care randarea îl scrie din același helper. Asta repară și prima firimitură, care avea ${origin}/ fix în cod: pe /en/products/hypervolt-3 traseul pornea de pe homepage-ul românesc. Verificat pe live înainte de fix.

Lipirea prefixului ar fi dat /en/, iar canonicul e /en — de aceea trece prin localizePath, nu prin concatenare.

Verificat

Cel mai tare dintre testele noi rezolvă fiecare adresă de imagine din JSON-LD pe disc, în frontend/public, în toate trei limbile — un test care verifică doar coada adresei ar trece și cu prefixul lipit.

Ambele teste au fost verificate că pot cădea: re-lipind prefixul, 4 teste devin roșii; punând înapoi ${origin}/ la firimitura rădăcină, cad exact cele două limbi cu prefix, iar româna rămâne verde.

Backend: build curat, 489 de teste în 31 de fișiere (erau 471).

Găsit pe parcurs

assetPath acceptă o adresă absolută http(s):// ca imagine de produs, iar amândouă locurile care construiesc adresa finală ar lipi originul în față. Nu e viu — zero produse din 31 pe producție — deci issue propriu: #40 (closed).

Part of #31 (closed)

Merge request reports