Skip to content

404 real: ecranul magazinului pentru vizitator, status corect pentru crawler

Vitalie requested to merge 4_real-404 into main

Două defecte se întâlneau pe aceeași cale.

Ecranul greșit. O adresă necunoscută ajungea pe pagina implicită nginx: un ecran alb de 153 de octeți, în engleză, cu versiunea serverului scrisă pe el și fără niciun drum înapoi spre magazin. Cauza e o subtilitate de nginx — error_page se moștenește prin înlocuire, nu prin adăugare, iar error_page 500 502 503 504 din location @spa anula complet regula de 404 de la nivel de server. Comentariul din configurație promitea deja comportamentul corect; doar directiva lipsea din blocul potrivit.

Statusul greșit. Un produs, o colecție sau un articol care nu există răspundea 200 cu textul „Pagina nu a fost găsită". Google numește asta soft 404 și ține adresa inventată în index. Randorul știa deja că pagina lipsește; acum o și spune, iar ruta transformă verdictul în status. Steagul notFound e deliberat separat de noindex, pe care îl poartă și formularul de comandă și pagina de cont, care sunt pagini reale cu 200.

În plus, server_tokens off — versiunea nginx nu mai apare nici în antetul Server, nici pe paginile de eroare.

Verificare de comportament, nu doar de sintaxă. Am rulat ambele configurații în nginx 1.27 într-un container, cu același shell pe disc:

configurația veche configurația nouă
/pagina-inexistenta 404, 153 octeți, pagina nginx 404, shell-ul aplicației
antetul Server nginx/1.27.5 nginx
rută cunoscută, backend căzut 200, shell 200, shell (neschimbat)
fișier real pe disc 200 200

Plasa de siguranță pentru randor căzut rămâne cu =, deci un 502 continuă să dea 200 cu shell-ul — un randor stricat nu are voie să ia magazinul cu el.

Verificare: backend 411 teste în 25 de fișiere, frontend 152 în 19; ambele build-uri curate; tsc --noEmit -p tsconfig.app.json curat; nginx -t trece.

Closes #4 (closed)

Merge request reports