Date structurate: Article, FAQPage, BreadcrumbList
Datele structurate sunt marcajul din pagină prin care Google înțelege ce fel de conținut are în față și decide dacă îl afișează cu dată, imagine sau traseu de navigare în loc de o adresă brută. Pe hyperice.md marcajul e complet pe produse și colecții, dar lipsește pe blog, pe pagina de întrebări frecvente și pe majoritatea paginilor statice. Blogul e singura parte a site-ului care poate aduce vizitatori pe întrebări, nu pe numele produsului, și tocmai el nu are niciun marcaj de articol.
Ce am găsit
Articolele de blog nu au marcaj Article
HTML-ul servit pentru https://hyperice.md/blogs/hyperhub/foam-rolling-for-sciatica (și variantele /en, /ru) conține exact un singur bloc <script type="application/ld+json">, de tip BreadcrumbList. Același rezultat în DOM-ul randat.
Cauza, backend/src/services/page-meta.ts:271-276, ramura de articol:
jsonLd: [
breadcrumbJsonLd([
{ name: pageStrings(strings, 'hyperhub').title, url: absolute('/blogs/hyperhub') },
{ name: title, url: absolute(canonicalPath) },
]),
],
backend/src/services/structured-data.ts are 109 linii și exportă doar organizationJsonLd (linia 27), productJsonLd (linia 65) și breadcrumbJsonLd (linia 98) — nicio funcție pentru Article. Sitemap-ul conține 216 adrese de articol (72 de articole × 3 limbi).
Pagina de întrebări frecvente nu are marcaj FAQPage
curl pe /support/faq, /en/support/faq și /ru/support/faq: zero apariții de application/ld+json în toate trei.
Conținutul există și e real: frontend/src/pages/support/Faq.tsx:22 (blocul RO), :155 (RU), :287 (EN); blocul RO conține 8 perechi întrebare/răspuns, despre plasarea comenzii, modalitățile de plată, TVA, primirea produsului, retur, garanție și statutul de dispozitiv medical.
Pe fișa de produs, DOM-ul randat al https://hyperice.md/products/hypervolt-3-pro conține h2 „Întrebări frecvente" cu întrebări și răspunsuri vizibile, dar JSON-LD-ul emis e doar Product + BreadcrumbList. În frontend/src/data/productDetails.ts există 42 de blocuri faq:.
Condiția Google (marcajul trebuie să reflecte ce se vede în pagină) e deja îndeplinită — lipsește doar marcajul. Câștigul practic e însă mic: din 2023 Google afișează rezultate îmbogățite de tip FAQ doar pentru site-uri guvernamentale și de sănătate, nu pentru magazine.
27 din 42 de pagini nu au niciun JSON-LD
Verificat prin curl, numărul de blocuri application/ld+json este 0 pe /about, /blogs/hyperhub, /gift-cards, /legal/privacy, /legal/terms, /recovery-rooms, /support/contact, /support/faq și /therapy/recovery — fiecare în cele trei limbi.
Cauza, backend/src/services/page-meta.ts:134:
const staticPage = (key: string, canonicalPath: string, extra: JsonLdNode[] = []): PageMeta => {
Parametrul extra e folosit într-un singur apel, linia 164 — staticPage('home', '/', [organizationJsonLd(origin)]). Apelurile de la liniile 170, 174, 178 și 288 nu trimit nimic, deci toate paginile statice ies fără date structurate. Mecanismul există deja: breadcrumbJsonLd din structured-data.ts:98 e folosit pe colecții (page-meta.ts:235) și pe produse, unde traseul e corect — pozițiile 1..n contigue, cu name și item prezente.
De făcut
-
Se adaugă o funcție articleJsonLdînbackend/src/services/structured-data.tsși se emite înpage-meta.tslângă breadcrumb:@typeArticle,headlinedin titlu,descriptiondin excerpt,imagecuheroImageabsolut,datePublisheddinarticle.dateISO,publisherOrganization cu numele și logoul dinbackend/src/lib/company.ts,mainEntityOfPagecanonicalul. Fărăauthorinventat — se punepublisher, care e adevărat. -
În page-meta.ts,staticPageconstruiește singur traseul dinrootCrumbplus pagina curentă, și pentru/therapy/*,/legal/*,/support/*treapta intermediară dacă are pagină proprie — la fel cum face ramura de colecție de la linia 235. Odată cu asta dispare și parametrulextra, folosit într-un singur loc. -
Se adaugă o funcție faqPageJsonLd(qa)înstructured-data.ts(@typeFAQPage,mainEntitycuQuestion/acceptedAnswer), apelată înpage-meta.tspentru ruta/support/faq— întrebările se mută dinFaq.tsxîntr-un modul comun sau se citesc din aceeași sursă — și pentru rutele de produs care au blocfaqînfrontend/src/data/productDetails.ts.
Criteriu de acceptare
-
curlpe 3 articole × 3 limbi arată două blocuri JSON-LD,ArticleșiBreadcrumbList, ambele parsabile, cuheadline,image,datePublishedșipublishercompletate;datePublishedcoincide cu data afișată pe pagină. -
curlpe/about,/therapy/recovery,/support/faq,/legal/terms,/recovery-roomsși/gift-cardsîn cele 3 limbi arată câte unBreadcrumbListparsabil, cu pozițiile 1..n contigue șiitem-uri care conțin prefixul de limbă corect. -
curlpe/support/faqîn cele 3 limbi arată un blocFAQPageparsabil cu 8Question, fiecare cuacceptedAnswernevid, iar textul din marcaj coincide cuvânt cu cuvânt cu ce se vede pe pagină; la fel pe cel puțin 3 fișe de produs cu FAQ.