Expose website tags and badges via business settings and business-info.
Stores custom meta tags and eNamad/Samandehi footer HTML in settings so storefronts can render them from the public API. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
cffc828328
commit
63ae9b22b9
@@ -331,6 +331,24 @@ These are **required on every crawlable page** (home, listing, product/blog/port
|
||||
**Open Graph (recommended)**
|
||||
- Set `og:title`, `og:description`, and `og:image` on important pages (home + detail pages) from CMS media when available.
|
||||
|
||||
### Site-wide meta tags + trust badges (eNamad / Samandehi)
|
||||
|
||||
Business admins configure this under **Website → Tags & Badges**.
|
||||
|
||||
1. `GET /tenants/{domain}/website/business-info`
|
||||
2. For each item in `metaTags` (array of `{ name, content }`), emit once in the root layout `<head>`:
|
||||
|
||||
```html
|
||||
<meta name="{name}" content="{content}">
|
||||
```
|
||||
|
||||
In Next.js App Router, map them into `generateMetadata()` → `other: { [name]: content }`. Verification metas (eNamad, Google, etc.) belong here as custom name/value rows.
|
||||
|
||||
3. For each item in `trustBadges` (array of `{ kind, embedHtml }`), render `embedHtml` in the site footer (e.g. `dangerouslySetInnerHTML`). These are HTML widgets only (not meta). Scripts are stripped by the API — still treat the HTML as CMS-controlled content.
|
||||
|
||||
- When arrays are empty, omit tags / footer badges.
|
||||
- Do **not** hardcode eNamad/Samandehi HTML in the website repo when these fields are present.
|
||||
|
||||
### Site-wide Schema.org JSON-LD (Organization / LocalBusiness)
|
||||
|
||||
Business admins configure this under **Website → Settings → Structured data**. The API builds a ready `jsonLd` object for you.
|
||||
@@ -398,6 +416,7 @@ Website rules:
|
||||
4. Public URL is included via CMS sitemap and/or `sitemap-config.json` static pages
|
||||
5. Site-wide Organization/LocalBusiness JSON-LD from `business-info.schema.jsonLd` when enabled
|
||||
6. Product/blog detail pages emit `product.schema.jsonLd` / `blog.schema.jsonLd` when present
|
||||
7. Site-wide `metaTags` + footer `trustBadges` from business-info when present
|
||||
|
||||
If OpenAPI and this brief conflict, **OpenAPI wins**.
|
||||
|
||||
|
||||
@@ -567,6 +567,36 @@
|
||||
}
|
||||
},
|
||||
"required": ["enabled", "type", "sameAs", "jsonLd"]
|
||||
},
|
||||
"metaTags": {
|
||||
"type": "array",
|
||||
"description": "Enabled custom meta tags for the site <head> (name/content). Configured under Website → Tags & Badges.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": { "type": "string" },
|
||||
"content": { "type": "string" }
|
||||
},
|
||||
"required": ["name", "content"]
|
||||
}
|
||||
},
|
||||
"trustBadges": {
|
||||
"type": "array",
|
||||
"description": "Enabled eNamad / Samandehi footer widgets (sanitized HTML). Empty when none are shown.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"kind": {
|
||||
"type": "string",
|
||||
"enum": ["enamad", "samandehi"]
|
||||
},
|
||||
"embedHtml": {
|
||||
"type": "string",
|
||||
"description": "Trusted HTML snippet (scripts stripped server-side)."
|
||||
}
|
||||
},
|
||||
"required": ["kind", "embedHtml"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user