namespace CMSDAL.DTO.Seo; // Not a DB-mapped DTO — serialized as the "seo" sub-object inside the existing // ContentDTO.ContentMetaDataJson field (Site/Page platform Phase 6). Only meaningful for // SITE_PAGE-type content; scoped under its own key so other future uses of MetaDataJson don't // collide with it. Automatically versioned for free since ContentVersion already snapshots the // whole ContentDTO on every workflow transition. public class PageSeoMetadataDTO { public string? MetaTitle { get; set; } public string? MetaDescription { get; set; } public string? CanonicalUrl { get; set; } public bool NoIndex { get; set; } public string? OgTitle { get; set; } public string? OgDescription { get; set; } public string? OgImageUrl { get; set; } public string? OgType { get; set; } // Raw JSON-LD, author-supplied or (later) generated — emitted as-is by the renderer. public string? StructuredDataJsonLd { get; set; } // AEO — answer-engine optimization: Q&A pairs a renderer can emit as FAQPage JSON-LD. public List? FaqEntries { get; set; } // GEO — generative-engine optimization: a short machine-readable page summary a renderer // can fold into a site-wide llms.txt feed. public string? LlmsTxtSummary { get; set; } } public class FaqEntryDTO { public string Question { get; set; } = string.Empty; public string Answer { get; set; } = string.Empty; }