Svo znanje
Bodulica — vanilla SPA SEO i edge obrasci
bodulica-vanilla-seo-patterns·Bodulica
seovanilla-spacloudflare-pagessupabase-edge
Bodulica — vanilla SPA SEO i edge obrasci
SPA SEO bez zasebnih HTML stranica
Bodulica je jedan index.html. Kategorije nisu zasebne rute — filter u DOM-u.
Obrazac:
CATEGORY_SEOmapa (hr/en) po slug-u kategorijeupdateCategorySeo(cat)mijenjatitle,meta description,keywords, OG/Twitter,canonicalhistory.replaceStateza URL:?cat=delicije&lang=hr- Na load: parsiraj
?cat=→applyCategoryFilter(cat) sitemap.xmllistaju iste URL-ove za crawlere (iako je ista SPA datoteka)
Zašto: Google vidi konzistentan canonical i meta po „virtualnoj“ kategoriji bez novih HTML fajlova.
Nevidljiva creator atribucija
Zahtjev: Google vidi Dario + Martina + Bodulica vezu, bez UI linkova/gumbova.
Što radi:
<meta name="author|designer|creator">u<head>only<link rel="me" href="...">za socijalne profile- JSON-LD
Person+knows+CreativeWorkscreator/contributor - Meta description (ne hero tekst) može diskretno spomenuti „web dizajn: …“
Što NE raditi:
- Footer „Designed by“ badge
- Vidljivi linkovi na osobne profile
display:nonetekst na stranici (koristi head + JSON-LD)
Oprez: Ne upisivati neverificirane FB profile (Martina) — samo potvrđeni IG.
Dinamički Product / ItemList schema
- Nakon
fetch(/products): injektirajItemListu<script id="itemListLd"> - Pri
oM(slug)(modal): ažuriraj<script id="productLd">sProduct+Offer - Pri
cM()(zatvaranje modala): očistiproductLd
Crawleri koji ne izvršavaju JS vide statički @graph u headu; JS-enabled crawleri vide i dinamičke proizvode.
Supabase Edge kao jedini admin backend
- Shop i admin zovu istu edge funkciju
bodulica-api - RLS zategnut — javni insert na orders/products uklonjen
- Edge koristi
service_roleza admin/checkout - Admin token: HMAC, ne JWT library — secret iz
JWT_SECRETiliADMIN_PASSWORD
Stripe live vs test
getStripeMode()iz prefiksask_test_/sk_live_- Webhook i checkout postavljaju
stripe_modena order - Admin stats:
?live_only=truedefault — test ne ulazi u prihod - Admin UI: TEST badge na narudžbama s
stripe_mode=test
Contact → inbox bez pogrešnog schema
inbox_threads nema customer_name. Kontakt forma:
- Insert thread (subject, email, …)
- Insert message s imenom u
body_text
Provjeri stvarne kolone prije inserta — seed/migracije mogu biti starije od koda.
Deploy napomene
- Cloudflare Pages:
admin.html→ 308 na/admin - Edge function deploy odvojen od Pages pusha
supabase/.temp/*ne commitati