How it works
Each unique page context gets its own pool of starter questions, shared by every visitor who loads that context. Remark generates the pool from the title, content, and products you provide via HTML attributes on the<remark-qa-activator> element. When the context changes — for example, when you edit page-content — Remark regenerates the pool for everyone.
The attributes describe the page, not the visitor. Text that changes from one visitor to the next either belongs in context-key, when it takes one of a small set of values, or should be left out.
Page context follows a precedence order: product context (most specific) takes priority over page context, which takes priority over site-wide questions (the fallback). If external-id is set, questions target that specific product regardless of other attributes.
Attributes
string
A product ID from your ecommerce platform. When present, questions target this specific product — overrides page context.On Shopify storefronts, Remark detects the product automatically, so you don’t need to set this attribute on product pages.Example:
7982345678901string
Identifies the page. Same key = same question pool — defines which pool questions come from.Example:
/collections/running-shoesstring
The page’s title. Used when generating questions — helps Remark understand what the page is about.Example:
Women's Running Shoesstring
The page’s main text content. More content = more relevant questions.Example:
Shop our selection of lightweight trail and road running shoes...string
Comma-separated product IDs from your ecommerce platform related to the page. Gives Remark additional product context without changing which pool is used.Example:
7982345678901,7982345678902string
Splits a page into separate question pools. Use it for multiple embedded chats on the same page, or for a page whose meaning depends on a small set of states — a quiz result, a selected tab, a step in a flow. Each distinct key gets its own pool, even at the same URL, and the key text is part of the context Remark generates that pool from. Keep the set of keys small and fixed: every new key is a new pool to generate.Example:
featured-collectionExamples
Product page
A furniture store’s product detail page:page-key, page-title, or page-content since the product catalog provides all the context Remark needs.
Collection page
An outdoor gear store’s “Hiking Boots” collection:Blog post
A skincare brand’s ingredient guide:Landing page with multiple sections
A home goods store with separate “Kitchen” and “Bathroom” sections on the same page:page-key and page-title (same page) but context-key gives each section its own question pool. The kitchen section gets questions about cookware; the bathroom section gets questions about towels and organizers.
Quiz results page
A running store’s shoe finder ends on a results page. The recommendation differs per visitor but always comes from the same three categories:page-content is the same for every visitor, and context-key carries the part that varies. Each of the three results gets its own pool, generated once and shared by every visitor with that result — a stability runner sees questions about stability shoes, a trail runner sees questions about trail shoes.
Putting the recommendation into page-content instead looks similar but behaves very differently. Each visitor with a new result rewrites the page’s context and regenerates its single pool, so most visitors see questions written for someone else’s result.
Per-placement copy
Two more attributes let a specific embedded chat carry its own copy — useful when one placement, like a collection page, should read differently from the rest of your site without changing the text every other placement uses.string (JSON)
A JSON object mapping label paths to replacement text, using the same paths as the label editor in the dashboard (Settings > Features > Labels). Overrides apply only to this element; every other Remark surface keeps your site-wide labels. Keys that don’t match an existing label are ignored.Example:
{"widgetScenes.landingHeading": "Got a question? We can help you."}string
Replaces the featured expert’s tagline on this element’s landing screen. The expert’s own tagline still appears on every other placement.Example:
Ask about hiking boots — or anything else.Tips
- Use a stable path for
page-key— something like/collections/hiking-boots, not a full URL with query parameters. Remark normalizes the value, but a clean path is easiest to reason about. - Locale prefixes are stripped automatically —
/en/collections/hiking-bootsand/fr-ca/collections/hiking-bootsboth resolve to/collections/hiking-boots, so you don’t need to remove them yourself. - More
page-content= better questions — the more text you provide, the more relevant the generated questions will be. external-idtakes priority — when present, questions are about that product regardless of other attributes.- Questions regenerate for everyone — when context changes (for example, when you edit
page-content), Remark generates a new pool and every visitor to that context sees it.
Best practices
- Keep
product-idsstable. Remark regenerates questions whenever the context changes, andproduct-idsare part of that context. If the product list changes on every page load — for example, because it reflects a randomized or personalized sort order — questions will regenerate constantly and never have a chance to settle and improve over time. Pass a consistent set of product IDs that represents the page’s core products. - Send the same
page-contentto every visitor. The same principle applies — timestamps, personalized greetings, live inventory counts, and per-visitor recommendations all change the context and trigger regeneration. A context that regenerates too often stops keeping up, and visitors see questions generated for an earlier version of the page. Strip volatile text before passing it. When the variation is a small set of states, move it tocontext-key; when it isn’t, leave it out.