Adresele vechi „elite” răspund 404 la tot ce nu pornește JavaScript
Cele șase adrese de produs rămase de la redenumirea Elite → Premier trăiesc doar
în routerul React. Un browser cu JavaScript e salvat abia după ce a primit deja
404; un crawler, Search Console sau previzualizarea unui link trimis pe WhatsApp
sau Slack primesc un 404 gol, cu X-Robots-Tag: noindex. Rutele acestea există
exact pentru cazul „cineva a distribuit deja adresa veche", iar acela e cazul
care pică.
Ce am găsit
Verificat pe producție, toate cele șase mânere, pe ambele forme de adresă:
| Adresă | Răspuns |
|---|---|
/products/normatec-elite |
404 |
/products/normatec-elite-hips |
404 |
/products/normatec-elite-12v-dual-charger |
404 |
/products/open-box-normatec-elite |
404 |
/products/open-box-normatec-elite-hips |
404 |
/products/elite-pack |
404 |
Forma singular e mai rea, nu mai bună: /product/normatec-elite întoarce
301 către /products/normatec-elite, adică un redirect permanent direct
într-un 404. La fel și sub prefixele de limbă: /ru/products/normatec-elite
răspunde tot 404.
Control: /products/normatec-premier răspunde 200, deci rendererul servește
normal mânerele vii.
Cauza
RENAMED_PRODUCT_HANDLES (frontend/src/App.tsx:70-77) generează rute de
redirect în router (:81-92, montate la :137). nginx nu știe nimic despre
ele. $spa_known acceptă ~^(/(?:ru|en))?/products/[^/]+/?$, deci nu oprește
cererea; o trimite mai departe la renderer, getProductByHandle nu găsește
produsul, backend/src/routes/render.ts pune status 404, iar
error_page 404 /app-shell.html întoarce învelișul gol păstrând 404-ul.
$canonical_redirect are o singură regulă pe produse — singular → plural
(frontend/nginx.conf:27) — care duce mânerul mort mai departe fără să-l
redenumească.
frontend/src/test/nginxRoutes.test.ts nu pomenește RENAMED_PRODUCT_HANDLES
și niciunul dintre cele două seturi de mânere, deci testul de paritate nu
acoperă clasa asta deloc. De asta a trecut verde.
De făcut
-
Câte o regulă în $canonical_redirectdinfrontend/nginx.conf: 301 de la fiecare mâner vechi la cel nou, pe ambele forme de adresă, cu prefixul de limbă păstrat, ca la celelalte intrări. -
nginxRoutes.test.tssă citeascăRENAMED_PRODUCT_HANDLESși să pice dacă un mâner vechi nu are regulă în nginx. -
Verificare pe producție după deploy: fiecare din cele șase adrese, pe ambele forme și în cele trei limbi, ajunge 301și apoi200.
Atenție — trei ținte răspund tot 404
Verificat pe producție acum: /products/normatec-premier-12v-dual-charger,
/products/open-box-normatec-premier și /products/open-box-normatec-premier-hips
răspund 404. Redirectul le-ar duce din 404 în 404. Astea trei sunt o problemă de
date, nu de configurație — produsele nu sunt publicate în panou — și se lămuresc
înainte de a declara lucrarea încheiată.
Găsit la auditul de linkuri interne din #51 (closed).
Cele trei ținte stinse din panou au primit card propriu: #74 (closed).