Skip to content

ProductSeoOptions

Defined in: @storesynk/react/dist/seo.d.ts:20

SEO for a product page as framework-neutral data - map it onto your framework’s head API (TanStack Start head(), Remix meta()). The JSON-LD half is renderProductJsonLd + . Uses the same cached fetches as renderProduct, so pairing them (with a shared scope under fresh) costs no extra requests.

head: ({ loaderData }) => ({ meta: [ { title: loaderData.seo.title }, { name: ‘description’, content: loaderData.seo.description }, { property: ‘og:title’, content: loaderData.seo.title }, { property: ‘og:image’, content: loaderData.seo.image }, { property: ‘og:type’, content: ‘product’ }, ], })

optional description?: string

Defined in: @storesynk/react/dist/seo.d.ts:26

Override the meta description (default: the product’s plain-text description).


optional fresh?: boolean

Defined in: @storesynk/react/dist/runtime.d.ts:27

Bypass the module cache and fetch live (per-request SSR freshness).

FetchOptions.fresh


optional locale?: I18nState | null

Defined in: @storesynk/react/dist/seo.d.ts:22

Per-request buyer market (from getRequestLocale()); null-safe.


optional scope?: RequestScope

Defined in: @storesynk/react/dist/runtime.d.ts:30

With fresh: dedupe fetches within one request (see createRequestScope). Without it, every fresh call fetches.

FetchOptions.scope


optional siteName?: string

Defined in: @storesynk/react/dist/seo.d.ts:30

Appended to the default title as ” - siteName”.


optional title?: string

Defined in: @storesynk/react/dist/seo.d.ts:24

Override the document title (default: product title, with siteName appended).


optional url?: string

Defined in: @storesynk/react/dist/seo.d.ts:28

Canonical URL for og:url (pass it if you have it).