SEO hyperice.md: meta pe pagină, sitemap, 404 real, canonice și Search Console
Audit făcut pe 2026-08-24 direct pe https://hyperice.md și pe codul din
frontend/. Site-ul e o aplicație React (Vite, fără randare pe server), deci tot
ce ține de SEO trebuie adăugat explicit — acum lipsește aproape complet.
1. Ce am găsit (verificat, nu presupus)
Meta identice pe tot site-ul. frontend/index.html are un singur <title> și
o singură descriere, în engleză, pentru toate rutele. Nu există react-helmet sau
echivalent (grep prin frontend/src: zero rezultate pentru helmet, document.title,
canonical, og:, application/ld+json). Consecință: toate paginile — 31 de
produse, colecțiile, cele 4 pagini de terapie, blogul — apar în Google cu același
titlu și aceeași descriere.
Nu există sitemap. https://hyperice.md/sitemap.xml întoarce 200 cu
content-type: text/html — adică shell-ul aplicației, nu un sitemap. Nu poate fi
trimis în Search Console.
Nu există 404 real. https://hyperice.md/pagina-inexistenta-test-404 întoarce
200 și randează SPA-ul (nginx.conf: try_files $uri /index.html). Google
raportează asta ca „Soft 404" și poate indexa URL-uri inventate.
URL-uri duplicate pentru același conținut, fără canonical și fără redirect:
| Pagina | URL 1 | URL 2 |
|---|---|---|
| Produs | /products/:handle |
/product/:handle |
| Masaj | /therapy/massage |
/pages/massage |
| Încălzire | /therapy/warm-up |
/pages/warm-up |
| Recuperare | /therapy/recovery |
/pages/recovery |
| Durere | /therapy/pain-relief |
/pages/pain-relief-tension |
| Despre noi | /about |
/pages/about-us |
| Recovery Rooms | /recovery-rooms |
/pages/hyperice-recovery-rooms |
| Gift Guide | /gift-guide |
/pages/gift-guide |
| Termeni | /legal/terms |
/termeni-si-conditii |
| Confidențialitate | /legal/privacy |
/politica-de-confidentialitate |
| Întrebări | /support/faq |
/intrebari-frecvente |
| Contact | /support/contact |
/contact |
Limba nu e în URL. frontend/src/i18n.ts schimbă limba doar în client
(localStorage + limba browserului). Googlebot vede o singură versiune, cea de
fallback (engleză). Conținutul în română și rusă — exact piața țintă — nu poate fi
indexat, și nu se poate pune hreflang fără URL-uri distincte per limbă.
Search Console nu e configurat. Nu există meta google-site-verification în
pagină și nu există înregistrare TXT de verificare în DNS (singurul TXT pe
hyperice.md este SPF-ul de email).
Alte constatări. http:// redirectează corect 301 spre https://.
www.hyperice.md nu are înregistrare DNS. robots.txt conține un bloc gestionat,
injectat de Cloudflare înaintea fișierului nostru, care blochează boții AI
(GPTBot, CCBot, Bytespider, Google-Extended etc.); Googlebot clasic rămâne permis,
deci indexarea nu e afectată. Nu există niciun cod de analiză (GA4 / Tag Manager).
2. De făcut, în ordinea asta
Etapa 1 — meta per pagină (~3h). react-helmet-async (sau echivalent) și un
component <Seo> folosit de fiecare pagină: title, description, canonical,
og:title/description/image/url, twitter:card. Titlurile produselor și
colecțiilor vin din datele deja încărcate.
Etapa 2 — 404 real (~1h). Ruta * randează deja NotFound, dar serverul
răspunde 200. Fie o listă de prefixe valide în nginx.conf care întoarce 404
pentru rest, fie un <meta name="robots" content="noindex"> pus de pagina
NotFound ca soluție parțială.
Etapa 3 — 301 pentru aliasuri (~2h). Alegem un URL canonic din fiecare pereche
din tabelul de mai sus; celălalt devine redirect permanent, nu componentă
duplicată. Redirect pe server (nginx.conf), nu <Navigate> în client, ca să fie
un 301 adevărat.
Etapa 4 — sitemap.xml (~2h). Generat din baza de date (produse și colecții
publicate, pagini statice, articole Hyperhub), servit de backend la
/sitemap.xml, cu lastmod. Adăugat Sitemap: în robots.txt.
Etapa 5 — date structurate (~2h). JSON-LD: Product cu preț și
disponibilitate pe paginile de produs, Organization cu datele firmei pe toate
paginile, BreadcrumbList pe categorii. Validat cu Rich Results Test.
Etapa 6 — limba în URL (~8h, cea mai mare, poate merge separat). Prefixe
/ro/, /ru/, engleza pe rădăcină (sau invers), hreflang reciproc plus
x-default, <html lang> corect, sitemap cu toate variantele. Fără asta,
versiunile RO și RU rămân invizibile în căutare.
Etapa 7 — Search Console.
- Proprietate de tip Domeniu (
hyperice.md, acoperă și subdomeniile), verificată prin TXT în Cloudflare DNS. - Trimis
https://hyperice.md/sitemap.xml. - Inspectare URL + cerere de indexare pentru pagina principală și 3-4 pagini cheie.
- De urmărit apoi: raportul Indexarea paginilor (soft 404, „duplicat fără canonic ales de utilizator"), Core Web Vitals, Îmbunătățiri → Produse.
- Opțional, aceeași verificare în Bing Webmaster Tools (import direct din GSC).
3. De decis
-
Previzualizarea la partajare (Facebook, WhatsApp, Telegram) nu execută
JavaScript, deci
og:pus de helmet nu o rezolvă. Dacă previzualizările contează, e nevoie de prerandare la build sau de un Worker Cloudflare care servește meta pentru boți. E o discuție separată de indexarea în Google, care randează JS. -
www.hyperice.md: îl lăsăm nefuncțional sau adăugăm CNAME + redirect 301 spre apex? - Etapa 6 se face acum sau după ce restul e livrat și indexat?
4. Criteriu de acceptare (etapele 1-5 și 7)
- Fiecare tip de pagină are titlu și descriere proprii, cu
canonicalspre un singur URL. -
curl -Ipe un URL inexistent întoarce404. - Fiecare alias din tabel întoarce
301spre URL-ul canonic. -
https://hyperice.md/sitemap.xmlîntoarce XML valid, cu toate paginile publice, și e referit dinrobots.txt. - Rich Results Test validează
Productpe o pagină de produs. - Proprietatea din Search Console e verificată, sitemap-ul acceptat, fără erori în raportul de indexare la 7 zile după livrare.