Titluri și descrieri meta la lungimea rezultatului
Ține de #16 (closed). Citește secțiunea despre criteriul de acceptare înainte de merge — nu e îndeplinit literal, deliberat.
Ce era
Măsurat pe cele 384 de adrese din sitemap-ul de producție (issue-ul măsurase doar cele 42 statice):
| În interval | Sub | Peste | |
|---|---|---|---|
| Titluri (50-62) | 21/384 (5%) | 164 | 199, din care 189 peste 65 |
| Descrieri (140-165) | 26/384 (7%) | 161 | 197 |
Plus 5 descrieri tăiate la mijloc de cuvânt, toate pe articole — excerptul întreg ajungea în <meta name="description">, până la 876 de caractere.
Ce s-a făcut
Paginile statice (15 rute × 3 limbi): titluri și descrieri rescrise, 45/45 în interval, zero duplicate. Paginile noindex — cont, comandă, confirmare, 404 — sunt excluse: o pagină pe care îi spunem Google să n-o indexeze nu are nevoie de fragment în rezultate.
Paginile generate (produse, colecții, articole): titluri construite pe bugetul rămas după sufixul de brand, descrieri din propoziții întregi.
Decizia care schimbă criteriul
Issue-ul cerea „titlurile de articol sub 60 de caractere cu tot cu sufixul de brand". Nu s-a făcut, și n-ar trebui făcut. Prima implementare a respectat cerința și rezultatul măsurat a fost: 199 din 216 titluri de articol trunchiate, multe în fragmente care nu se citesc — „Revitalizează-ți picioarele: Cum să", „Sciatica relief unveiled: The power of foam" (din „foam rolling"), „Ролик для фасции при бурсите тазобедренного" (adjectiv la genitiv, fără substantiv). Iar la articolele „Ghid complet: " tăierea păstra jumătatea generică și pierdea subiectul.
Un titlu editorial rupt e prost peste tot — în fila browserului, la partajare, în rezultat. Unul lung e scurtat de Google singur, curat, doar în rezultat. Titlurile de articol se păstrează acum întregi; se scurtează doar pe o clauză pe care a încheiat-o autorul și numai dacă acea clauză păstrează subiectul specific.
Titlurile pe care le scriem noi — produs și colecție — rămân încadrate, pentru că acolo textul e al nostru.
Cifrele finale, măsurate independent de mine
429 de pagini generate randate prin resolvePageMeta, plus cele 45 statice:
| Prima implementare | Acum | |
|---|---|---|
| Titluri duplicate | 12 pagini | 0 |
| Titluri de articol trunchiate | 199/216 | 43/216 |
| Titluri care se termină pe prepoziție goală | 12 | 0 |
| Descrieri cu „…" | 262/429 | 165/429, toate pe excerpt propriu, 0 pe șablon |
| Descrieri oprite pe prepoziție/articol | 75 | 0 |
| Descrieri peste 165 | 0 | 0 |
| Titluri de produs 50-62 | 179/183 | 175/183 |
| Titluri de colecție 50-62 | 33/33 | 33/33 |
| Titluri de articol peste 65 | 0 | 159 — chiar decizia de mai sus |
| Descrieri sub 140 | — | 71, din care 24 colecții cu text propriu scurt |
Ce s-a înrăutățit, explicit: titlurile de articol peste 65 (0 → 159, prin decizie), descrierile de produs în interval (180 → 142, pentru că o propoziție întreagă și scurtă bate una lungă și ciuntită), titlurile de produs în interval (179 → 175, prețul regulii anti-ecou).
Un regres prins la verificare și reparat
Titlul paginii era folosit în două locuri unde se cere un nume, nu un titlu: pasul din firul Ariadnei de deasupra fiecărui articol, și linkurile din blocul <noscript> pe care îl citește un crawler. Mergea doar pentru că titlurile erau scurte. Cu titlurile noi, firul ar fi citit „Hyperhub: ghiduri de recuperare > " și fiecare link de navigație ar fi devenit o propoziție.
Paginile din fir poartă acum crumb — exact titlul scurt pe care îl aveau înainte. Verificat: firul dă „Hyperhub > ", linkurile dau „Terapie prin masaj", „Despre noi", „Hyperhub", „Contact".
Testul păzește că numele există, nimic mai mult. Un plafon de lungime n-ar distinge un nume de un titlu scurt — titlul care a stricat firul are 31 de caractere — iar comparația cu propriul titlu nu spune nimic nici ea, pentru că titlul rus al paginii de start a ieșit mai scurt decât numele pe care îl înlocuiește.
Două corecturi de limbă
- „Despre magazinul nostru de recuperare" — în română sună a recuperare de creanțe. Engleza și rusa păstrau cuvântul „tehnologie"; româna îl pierduse.
- Titlul rus promitea „adresa magazinului", dar singura adresă de pe pagina de contact e cea juridică a firmei, un apartament. Spune acum „reqvizitele companiei".
Verificat
| Comandă | Rezultat |
|---|---|
backend/ npm run build |
exit 0 |
backend/ npm test |
568 de teste în 38 de fișiere |
frontend/ npx tsc --noEmit -p tsconfig.app.json |
exit 0 |
frontend/ npx tsc --noEmit -p tsconfig.test.json |
exit 0 |
frontend/ npm run lint |
1 avertisment preexistent, nelegat |
frontend/ npm test |
396 de teste în 31 de fișiere |
Măsurat pe backend/prisma/dev.db, care oglindește catalogul de producție. Măsurătoarea pe cele 384 de adrese reale se face după deploy.
Ce rămâne, cu issue propriu
#49 — numele colecției „Gift Card Recommendations" nu e tradus; e dată din baza de date, nu meta. #23 (closed) — trei pagini de articol nu emit deloc descriere; preexistent, neatins de această lucrare.