FAQ editor + embed widget
Plans: Growth · Pro · Agency (FAQ editor is plan-gated; the embed widget is gated by the editor — Starter cannot author FAQs and therefore has nothing to embed)
Clione lets you author FAQs per Product, Variant, Category (BigCommerce) / Collection (Shopify), Page, or Globally — then serve them on your storefront with a single embed snippet, with a matching FAQPage JSON-LD block for crawlers and LLMs.
This page is about authoring, generating, importing, and the embed widget. For per-platform install details (BigCommerce Stencil, Catalyst headless, Shopify theme editor, Hydrogen / Next), see FAQ widget install.
Where it lives
Sidebar → store → FAQs.
Five tabs:
- Browse — search, edit, soft-delete, restore.
- Add — manual create, one at a time.
- Generate — LLM drafts (Growth and above).
- Import — bulk CSV upload.
- Embed Script — get the snippet for your storefront.
Entity parity — what you can attach FAQs to
Clione treats FAQs as a first-class entity with the same parity rule as enrichment: FAQs work across every entity type on both platforms.
| Entity type | BigCommerce | Shopify | Notes |
|---|---|---|---|
| Product | yes | yes | The most common attachment. |
| Variant | yes | yes | Useful for size/color/material specific questions. |
| Category | yes | n/a | BC categories. |
| Collection | n/a | yes | Shopify collections (same concept). |
| Page | yes | yes | About / Shipping / FAQ content page. |
| Global | yes | yes | Applies to every render — shipping, returns, warranty. |
Global FAQs are merged with entity-specific FAQs on every render. A product page shows its own FAQs plus the global set, in the order you control with sortOrder.
1. Adding FAQs manually
FAQs → Add:
- Pick Entity Type (Product / Variant / Category / Collection / Page / Global).
- Search for the entity by name. The picker shows display names, not raw IDs.
- For Global, no entity is selected — the FAQ applies storewide.
- Write the Question and Answer.
- (Optional) Set Locale if you publish multiple languages.
- (Optional) Set Sort Order to control display order. Lower = first.
- Save.
New FAQs are immediately visible to the embed widget — no propagation step.
2. Generating FAQs automatically (Growth and above)
FAQs → Generate is plan-gated. On Starter the tab is hidden — the whole FAQ section sits behind a LockedFeature feature="faq" route. Growth, Pro, and Agency see it.
The Generate panel sends the entity's enriched data (title, identity, reasoning, keywords) to your LLM and gets back a small batch of suggested Q&A pairs. You can:
- Pick the scope — one entity, a list of entities, or "everything in this store".
- Pick how many drafts per entity (default 5, max 10).
- Click Generate.
Drafts are saved automatically as status=approved and ready to serve. Edit or delete any you don't like from the Browse tab.
LLM cost is metered against your plan's enrichment quota — generating 50 product FAQs counts as 50 enrichment calls.
3. Bulk import (CSV)
FAQs → Import accepts a CSV with this header:
entityType,entityId,question,answer,locale,sortOrder
product,SKU-001,What is the warranty?,2-year manufacturer warranty,en,0
collection,summer-sale,When does the sale end?,Sunday at midnight CET,en,0
global,,What are your shipping times?,2–5 business days within the EU,en,0
Notes:
entityTypeaccepts:product,variant,category,collection,page,global.entityIdis empty forglobal. For everything else, use the platform's native ID (BC product ID, Shopify GID, page handle, etc.).localeis a BCP-47 tag (en,es,es-ES,fr-FR). The widget filters by the page'slangattribute when present.sortOrderis integer, ascending. Defaults to 0.- Header row is required. UTF-8 encoding. Excel users: save as "CSV UTF-8".
The importer dedupes by (entityType, entityId, question, locale). Re-importing a row updates answer and sortOrder; the FAQ ID is preserved so the embed cache doesn't churn.
4. Exporting
Two paths:
- Per-entity — in Browse, filter by entity and click ↓ Export CSV.
- Whole store — top of the FAQs page → ↓ Download all FAQs (CSV). One file, every FAQ across every entity, globals included.
Export uses the same column set as Import, so a round-trip (export → edit in Excel → re-import) is non-destructive.
5. The embed widget
FAQs → Embed Script is the source of the snippet you paste on your storefront.
Required setup
Before the widget can fetch anything, you need:
- An API key with the
products:readscope. - At least one Allowed Domain on that key (e.g.
shop.example.com,*.example.com).
Both are configured under Store → Settings → API Keys — see Store settings and API authentication. Without allowedDomains, the widget gets 403 from the API to block scraping.
The snippet
<div id="clione-faq"></div>
<script
src="https://api.clione.ai/embed.js"
data-api-key="sk_live_…"
data-target="#clione-faq"
async
></script>
The loader auto-detects the current page entity from, in order:
data-entity-type+data-entity-idattributes on the script tag (explicit override).- OpenGraph meta tags (
og:type="product",product:retailer_item_id). - URL patterns: Shopify
/products/,/collections/; BigCommerce/product/, category URLs; WooCommerce body classes; etc.
It then fetches the matching FAQs (entity-specific + global, merged), and injects:
- A visible accordion at the target selector.
- An invisible JSON-LD FAQPage block for crawlers and LLM ingestion.
"Powered by Clione" badge
Starter and Trial plans render a small Powered by Clione badge at the bottom of the accordion. The badge stays — toggling it off requires Growth or above and is controlled from Org → Brand, see Branding settings.
This is policy, not a bug. The branding toggle in Settings is disabled on Starter / Trial and the API enforces it on the embed side as well.
Per-platform install
The snippet itself is the same on every storefront, but where you paste it differs:
- BigCommerce Stencil — global footer or per-template injection.
- BigCommerce headless / Catalyst — page component import.
- Shopify theme editor — Custom Liquid block or
theme.liquid. - Hydrogen / Next.js / Nuxt — see the headless guides in the Developers sidebar.
Full step-by-step lives in FAQ widget install. The BigCommerce Schema Injector (which auto-installs the JSON-LD plumbing for products) is a separate feature — see Schema injector.
Troubleshooting
The widget renders empty — the FAQ list returned 0. Check: (1) you actually have FAQs for this entity or globally, (2) the locale filter matches the page's <html lang>, (3) you're not on a draft / unpublished entity ID.
403 Forbidden — the request's Origin / Referer isn't in allowedDomains for the API key. Add the domain on the key and reload.
JSON-LD doesn't show up in View Source — on Shopify, JSON-LD requires the theme app block to be enabled. On BC, the embed snippet writes it directly. See Schema injector for the platform-specific details.
Generate tab is missing — your plan doesn't include feature=faq. Upgrade to Growth or above in Billing.
Widget renders FAQs but the JSON-LD is missing — Check that the FAQ widget script tag is loaded before any other JSON-LD-emitting script. The widget appends to the head; if another script wipes the head later, the JSON-LD disappears. Inspect with the browser dev tools (Elements → head → search for FAQPage).
FAQs duplicate across multiple page renders — Common when the widget script is loaded twice (e.g. once in the theme header and once in a custom template). Confirm only one script tag with src="api.clione.ai/embed.js" exists per page.
Locale filter shows all FAQs regardless of <html lang> — The page's lang attribute may be missing or malformed (BCP-47 expected). Inspect with document.documentElement.lang in the console. Add the attribute server-side (BC: edit the theme's <html> element; Shopify: ensure your Markets language is configured).
Per-platform notes for FAQ authoring
BigCommerce
- Variant FAQs — BC product variants are first-class entities with their own IDs. When you attach a FAQ to a variant in the editor, the entity picker shows the variant's option selection (e.g. "Size: M, Color: Blue"). The FAQ renders only on the variant's selected state, which BC theme templates expose via the
variant_idquery string. - Category FAQs — render at the top of the category description on the BC Stencil template.
- Page FAQs — render at the bottom of BC content pages.
- Global FAQs — render on every page where the widget script runs.
Shopify
- Variant FAQs — Shopify variants have a
variantIdper option combination. The widget detects the current variant from the page's variant selector and shows the variant-specific FAQs. Note: themes that don't trigger a re-render on variant change won't refresh the FAQ list — the widget polls the URL?variant=parameter and re-fetches on change. - Collection FAQs — render at the top of the collection page above the product grid.
- Page FAQs — render at the bottom of Shopify content pages.
- Global FAQs — render on every page where the widget script runs.
Generation cost details
The Generate tab counts each generated FAQ against your enrichment credit quota:
- 1 product × 5 FAQs = 5 credits.
- 1 product × 10 FAQs (max) = 10 credits.
- 50 products × 5 FAQs = 250 credits.
The dashboard shows the projected credit consumption before you click Generate. You can cancel before the cost confirmation if it exceeds your budget.
Embed script — full reference
The embed script (https://api.clione.ai/embed.js) accepts the following data-* attributes:
| Attribute | Required | Default | Description |
|---|---|---|---|
data-api-key | Yes | — | Your store's API key with products:read scope. |
data-target | No | #clione-faq | CSS selector where the widget mounts. |
data-entity-type | No | auto-detect | Override: product, variant, category, collection, page. |
data-entity-id | No | auto-detect | Override the entity ID. |
data-locale | No | page lang | Force a specific locale. |
data-max | No | 10 | Maximum number of FAQs to show. |
data-theme | No | auto | light, dark, or auto (follows OS preference). |
data-render-json-ld | No | true | Set to false to suppress the JSON-LD block (if you render your own). |
data-debug | No | false | Logs detection + fetch decisions to the console. |