feat: graph validation and custom JSON-LD
- seo_schema (seoschema, E8) with the C17 server rules: invalid JSON with line and column, non-objects, 16 KB, depth 8, a literal <script and a type outside the kind's list refused; the value re-serialised - a custom node with a generated @id merges into it (schema.merged save notice), other nodes are appended to the graph - seo_primary_parent (seoparent) for article types; both values stored in the entry data on every locale row - the seo_graph widget action (E9 data), P1 primary_gone and the P2 schema type and breadcrumb trail rows - GET /_seo/api/v1/graph and MCP seo_get_graph; seo_set_url_seo and apply_batch accept primary_parent and schema The graph tool lands with the validation: the operations parity test binds the seo_graph widget action to its tool.
This commit is contained in:
@@ -20,6 +20,8 @@ type SEOValues struct {
|
||||
OGTitle *string `json:"og_title,omitempty" jsonschema:"the social title"`
|
||||
OGDescription *string `json:"og_description,omitempty" jsonschema:"the social description"`
|
||||
OGImage *string `json:"og_image,omitempty" jsonschema:"the social image: a path or an absolute URL"`
|
||||
PrimaryParent *string `json:"primary_parent,omitempty" jsonschema:"records only: the primary category of the breadcrumb trail and the article section, one of the record's parents as <type>:<id> (seo_get_url_seo and the graph tool name them); empty for the first parent. Shared by every locale"`
|
||||
Schema *string `json:"schema,omitempty" jsonschema:"records only: the structured data as a JSON string {\"type\": schema type or empty for the default, \"fields\": {serviceType, areaServed, price, currency} for Service, \"custom\": custom JSON-LD text (an object or a list, at most 16 KB, no script tag; a node with a generated @id is merged into it)}; empty resets it. Shared by every locale"`
|
||||
}
|
||||
|
||||
// Map returns the values that are set, keyed by column.
|
||||
@@ -29,6 +31,7 @@ func (v SEOValues) Map() map[string]string {
|
||||
"title": v.Title, "description": v.Description, "keyphrase": v.Keyphrase,
|
||||
"canonical": v.Canonical, "robots": v.Robots, "og_title": v.OGTitle,
|
||||
"og_description": v.OGDescription, "og_image": v.OGImage,
|
||||
"primary_parent": v.PrimaryParent, "schema": v.Schema,
|
||||
} {
|
||||
if p != nil {
|
||||
out[column] = *p
|
||||
|
||||
Reference in New Issue
Block a user