Add Schema.org JSON-LD, SEO meta overrides, and resilient bulk SMS.
Expose Organization/LocalBusiness and Product/BlogPosting jsonLd, optional seoMeta fields on content/categories, and continue mass SMS after per-recipient failures. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
db305c58a4
commit
aaf7a83742
@@ -195,6 +195,18 @@
|
||||
"store_item"
|
||||
],
|
||||
"description": "Where homepage special-product carousels read from. Defaults to store_item when the store module is enabled, otherwise product."
|
||||
},
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"description": "Site-wide Schema.org flags. Full jsonLd is on GET /tenants/{domain}/website/business-info.",
|
||||
"properties": {
|
||||
"enabled": { "type": "boolean" },
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["Organization", "LocalBusiness"]
|
||||
}
|
||||
},
|
||||
"required": ["enabled", "type"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -530,7 +542,32 @@
|
||||
}
|
||||
},
|
||||
"socialMedia": { "type": "object" },
|
||||
"addresses": { "type": "array", "items": { "type": "object" } }
|
||||
"addresses": { "type": "array", "items": { "type": "object" } },
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"description": "Site-wide Schema.org settings + ready-to-emit jsonLd (Phase A).",
|
||||
"properties": {
|
||||
"enabled": { "type": "boolean" },
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["Organization", "LocalBusiness"]
|
||||
},
|
||||
"name": { "type": "string", "nullable": true },
|
||||
"nameFa": { "type": "string", "nullable": true },
|
||||
"description": { "type": "string", "nullable": true },
|
||||
"priceRange": { "type": "string", "nullable": true },
|
||||
"sameAs": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" }
|
||||
},
|
||||
"jsonLd": {
|
||||
"type": "object",
|
||||
"nullable": true,
|
||||
"description": "Null when schema.enabled is false. Otherwise emit as application/ld+json on every public page (or at least the layout)."
|
||||
}
|
||||
},
|
||||
"required": ["enabled", "type", "sameAs", "jsonLd"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1001,7 +1038,7 @@
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "{ product, relatedProducts } — same shape as product-by-slug"
|
||||
"description": "{ product, relatedProducts }. `product.schema.jsonLd` is Product Schema.org JSON-LD when website structured data is enabled (null otherwise). Related products omit schema."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1080,7 +1117,7 @@
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "{ product, relatedProducts } — relatedProducts uses the product list-card shape (incl. store). Ranked by relativity (same category, then same brand) with availability beside it (in-stock first within each group). Up to 8 items; excludes the current product."
|
||||
"description": "{ product, relatedProducts }. `product.schema.jsonLd` is Product Schema.org JSON-LD when website structured data is enabled (null otherwise). Related products omit schema. relatedProducts uses the product list-card shape (incl. store). Ranked by relativity (same category, then same brand) with availability beside it (in-stock first within each group). Up to 8 items; excludes the current product."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1622,7 +1659,7 @@
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "{ blog }"
|
||||
"description": "{ blog }. `blog.schema.jsonLd` is BlogPosting Schema.org JSON-LD when website structured data is enabled (null otherwise)."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1648,7 +1685,7 @@
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "{ blog }"
|
||||
"description": "{ blog }. `blog.schema.jsonLd` is BlogPosting Schema.org JSON-LD when website structured data is enabled (null otherwise)."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user