FAQPage și pe pagina de carduri cadou
Pagina /gift-cards afișează un acordeon real cu trei întrebări și răspunsuri
(frontend/src/pages/GiftCards.tsx:417-453, cheile giftCards.faq.q1..q3 și
a1..a3). După #19 (closed), ea este singura pagină a magazinului cu acordeon vizibil
care nu emite bloc FAQPage: pagina de asistență și cele 42 de produse cu
acordeon îl emit.
Cauza
backend/src/services/page-meta.ts trimite atât /gift-cards, cât și aliasul
/products/gift-card prin staticPage('giftCards', '/gift-cards'), iar acela
citește întrebările din pageStrings(strings, key).entries — câmp pe care doar
blocul seo.faq îl are, pentru că acolo îl pune
frontend/scripts/emit-seo-strings.mjs din frontend/src/locales/faq.json.
Textele acestui acordeon nu stau însă în fișierele de traducere ca sursă finală:
sunt suprascrise din panou. ContentEntry are 8 rânduri cu page = "giftCards"
și cheile giftCards.faq.heading, needMore, q1..q3, a1..a3. Un marcaj
construit din fișierele de traducere ar putea deci contrazice ce citește
vizitatorul, exact lucrul pe care ghidul Google îl interzice — deci soluția
trebuie să citească din baza de date, nu din seo-strings.json.
Verificat prin randare peste dev.db: /gift-cards și /products/gift-card
întorc un singur bloc, BreadcrumbList, în toate cele trei limbi.
De făcut
-
Ramura /gift-cardsdinpage-meta.tscitește cele trei perechi dinContentEntry(page = "giftCards", cheileq1..q3/a1..a3), rezolvă limba prinresolveLocaleși emitefaqPageJsonLdînaintea traseului, la fel ca pe pagina de asistență. O citire îngustă, caproduct-service.firstGalleryImage, nu întregul grup de conținut. -
Randarea nu aruncă atunci când rândurile lipsesc sau sunt goale: nginx răspunde cu învelișul gol la o randare care eșuează, iar pagina și-ar pierde titlul și descrierea pentru un bloc pe care Google nu îl afișează oricum la magazine. -
Test în backend/tests/structured-data.test.ts:/gift-cards× 3 limbi emiteFAQPage+BreadcrumbList, cu întrebările din baza de date, iar o suprascriere făcută din panou se vede în marcaj.
Criteriu de acceptare
curl pe /gift-cards, /en/gift-cards și /ru/gift-cards întoarce două
blocuri parsabile, FAQPage și BreadcrumbList; cele trei întrebări din
FAQPage sunt identice cu cele afișate în acordeon, inclusiv după o editare
făcută din panoul de administrare.