[{"data":1,"prerenderedAt":1566},["ShallowReactive",2],{"navigation":3,"\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo":342,"\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo-surround":1561},[4,14,36,69,140,325],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","1.getting-started\u002F1.index",[9,10],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":15,"path":16,"stem":17,"children":18,"page":35},"Guides","\u002Fguides","2.guides",[19,23,27,31],{"title":20,"path":21,"stem":22},"Your First Layout","\u002Fguides\u002Fyour-first-layout","2.guides\u002F1.your-first-layout",{"title":24,"path":25,"stem":26},"Your First Page Template","\u002Fguides\u002Fyour-first-page-template","2.guides\u002F2.your-first-page-template",{"title":28,"path":29,"stem":30},"Your First Component","\u002Fguides\u002Fyour-first-component","2.guides\u002F3.your-first-component",{"title":32,"path":33,"stem":34},"Alternative UI Variants","\u002Fguides\u002Falternative-ui-variants","2.guides\u002F4.alternative-ui-variants",false,{"title":37,"path":38,"stem":39,"children":40,"page":35},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[41,45,49,53,57,61,65],{"title":42,"path":43,"stem":44},"How It All Works","\u002Fcore-concepts\u002Farchitecture","3.core-concepts\u002F1.architecture",{"title":46,"path":47,"stem":48},"The Data Model","\u002Fcore-concepts\u002Fthe-data-model","3.core-concepts\u002F2.the-data-model",{"title":50,"path":51,"stem":52},"Layouts & Pages","\u002Fcore-concepts\u002Flayouts-and-pages","3.core-concepts\u002F3.layouts-and-pages",{"title":54,"path":55,"stem":56},"Dynamic Pages","\u002Fcore-concepts\u002Fdynamic-pages","3.core-concepts\u002F4.dynamic-pages",{"title":58,"path":59,"stem":60},"Components","\u002Fcore-concepts\u002Fcomponents","3.core-concepts\u002F5.components",{"title":62,"path":63,"stem":64},"Draft & Publish Workflow","\u002Fcore-concepts\u002Fdraft-and-publish","3.core-concepts\u002F6.draft-and-publish",{"title":66,"path":67,"stem":68},"The Admin Panel","\u002Fcore-concepts\u002Fadmin-panel","3.core-concepts\u002F7.admin-panel",{"title":70,"path":71,"stem":72,"children":73,"page":35},"Api","\u002Fapi","4.api",[74,78,116,120,124,128,132,136],{"title":75,"path":76,"stem":77},"Bundle Setup","\u002Fapi\u002Fbundle-setup","4.api\u002F1.bundle-setup",{"title":58,"path":79,"stem":80,"children":81,"page":35},"\u002Fapi\u002Fcomponents","4.api\u002F2.components",[82,86,103],{"title":83,"path":84,"stem":85},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F2.components\u002F1.creating-components",{"title":87,"path":88,"stem":89,"children":90,"page":35},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F2.components\u002F2.annotations",[91,95,99],{"title":92,"path":93,"stem":94},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F2.components\u002F2.annotations\u002F1.publishable",{"title":96,"path":97,"stem":98},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F2.components\u002F2.annotations\u002F2.uploadable",{"title":100,"path":101,"stem":102},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F2.components\u002F2.annotations\u002F3.timestamped",{"title":104,"path":105,"stem":106,"children":107,"page":35},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F2.components\u002F3.built-ins",[108,112],{"title":109,"path":110,"stem":111},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F2.components\u002F3.built-ins\u002F1.collection-component",{"title":113,"path":114,"stem":115},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F2.components\u002F3.built-ins\u002F2.form-component",{"title":117,"path":118,"stem":119},"Dynamic & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F3.dynamic-pages",{"title":121,"path":122,"stem":123},"Users & Security","\u002Fapi\u002Fusers-and-security","4.api\u002F4.users-and-security",{"title":125,"path":126,"stem":127},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F5.data-fixtures",{"title":129,"path":130,"stem":131},"Configuration Reference","\u002Fapi\u002Fconfiguration","4.api\u002F6.configuration",{"title":133,"path":134,"stem":135},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F7.console-commands",{"title":137,"path":138,"stem":139},"Debugging & Profiler","\u002Fapi\u002Fdebugging","4.api\u002F8.debugging",{"title":141,"path":142,"stem":143,"children":144,"page":35},"Nuxt Module","\u002Fnuxt-module","5.nuxt-module",[145,149,162,178,203,207,279,304,308],{"title":146,"path":147,"stem":148},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F1.module-setup",{"title":150,"path":151,"stem":152,"children":153,"page":35},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F2.configuration",[154,158],{"title":155,"path":156,"stem":157},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F2.configuration\u002F1.nuxt-config",{"title":159,"path":160,"stem":161},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F2.configuration\u002F2.site-config-and-seo",{"title":163,"path":164,"stem":165,"children":166,"page":35},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F3.building-your-ui",[167,171,175],{"title":168,"path":169,"stem":170},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F3.building-your-ui\u002F1.creating-layouts",{"title":172,"path":173,"stem":174},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F3.building-your-ui\u002F2.creating-page-templates",{"title":83,"path":176,"stem":177},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F3.building-your-ui\u002F3.creating-components",{"title":179,"path":180,"stem":181,"children":182,"page":35},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F4.cwa-components",[183,187,191,195,199],{"title":184,"path":185,"stem":186},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F4.cwa-components\u002F1.cwa-component-group",{"title":188,"path":189,"stem":190},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F4.cwa-components\u002F2.cwa-page",{"title":192,"path":193,"stem":194},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F4.cwa-components\u002F3.cwa-link",{"title":196,"path":197,"stem":198},"\u003CCwaImage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-image","5.nuxt-module\u002F4.cwa-components\u002F4.cwa-image",{"title":200,"path":201,"stem":202},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F4.cwa-components\u002F5.cwa-default-layout",{"title":204,"path":205,"stem":206},"The useCwa() API","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F5.cwa-api",{"title":208,"path":209,"stem":210,"children":211,"page":35},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F6.composables",[212,245,262],{"title":213,"path":214,"stem":215,"children":216,"page":35},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F6.composables\u002F1.component",[217,221,225,229,233,237,241],{"title":218,"path":219,"stem":220},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F1.use-cwa-resource",{"title":222,"path":223,"stem":224},"Collection Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F2.use-cwa-collection-resource",{"title":226,"path":227,"stem":228},"Image Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-image-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F3.use-cwa-image-resource",{"title":230,"path":231,"stem":232},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form","5.nuxt-module\u002F6.composables\u002F1.component\u002F4.use-cwa-form",{"title":234,"path":235,"stem":236},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-input","5.nuxt-module\u002F6.composables\u002F1.component\u002F5.use-cwa-form-input",{"title":238,"path":239,"stem":240},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F6.composables\u002F1.component\u002F6.use-cwa-form-repeated",{"title":242,"path":243,"stem":244},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-collection","5.nuxt-module\u002F6.composables\u002F1.component\u002F7.use-cwa-form-collection",{"title":246,"path":247,"stem":248,"children":249,"page":35},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F6.composables\u002F2.admin-manager",[250,254,258],{"title":251,"path":252,"stem":253},"Manager Tab","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-manager-tab","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F1.use-cwa-resource-manager-tab",{"title":255,"path":256,"stem":257},"Resource Model","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-model","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F2.use-cwa-resource-model",{"title":259,"path":260,"stem":261},"Resource Upload","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-upload","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F3.use-cwa-resource-upload",{"title":263,"path":264,"stem":265,"children":266,"page":35},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F6.composables\u002F3.utilities",[267,271,275],{"title":268,"path":269,"stem":270},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F1.use-cwa-resource-endpoint",{"title":272,"path":273,"stem":274},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F2.use-query-bound-model",{"title":276,"path":277,"stem":278},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F3.use-cwa-resource-route",{"title":280,"path":281,"stem":282,"children":283,"page":35},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F7.component-helpers",[284,288,292,296,300],{"title":285,"path":286,"stem":287},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F7.component-helpers\u002F1.images-and-uploads",{"title":289,"path":290,"stem":291},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F7.component-helpers\u002F2.collections-and-pagination",{"title":293,"path":294,"stem":295},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F7.component-helpers\u002F3.html-content",{"title":297,"path":298,"stem":299},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F7.component-helpers\u002F4.real-time-updates",{"title":301,"path":302,"stem":303},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F7.component-helpers\u002F5.forms",{"title":305,"path":306,"stem":307},"Authentication","\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F8.authentication",{"title":309,"path":310,"stem":311,"children":312,"page":35},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[313,317,321],{"title":314,"path":315,"stem":316},"Overview","\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":318,"path":319,"stem":320},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":322,"path":323,"stem":324},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":326,"path":327,"stem":328,"children":329,"page":35},"Deployment","\u002Fdeployment","6.deployment",[330,334,338],{"title":331,"path":332,"stem":333},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":335,"path":336,"stem":337},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":339,"path":340,"stem":341},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"id":343,"title":159,"badge":344,"body":347,"description":1555,"extension":1556,"links":1557,"meta":1558,"navigation":620,"path":160,"seo":1559,"stem":161,"__hash__":1560},"docs\u002F5.nuxt-module\u002F2.configuration\u002F2.site-config-and-seo.md",{"label":345,"color":346},"Draft","amber",{"type":348,"value":349,"toc":1542},"minimark",[350,373,380,385,388,570,574,581,743,750,801,805,904,908,911,971,981,1041,1045,1056,1063,1096,1107,1112,1122,1210,1220,1224,1240,1373,1377,1388,1394,1398,1410,1413,1456,1460,1467,1535,1538],[351,352,353,354,364,365,368,369,372],"p",{},"CWA's SEO layer is built on top of ",[355,356,360],"a",{"href":357,"rel":358},"https:\u002F\u002Fnuxtseo.com",[359],"nofollow",[361,362,363],"code",{},"@nuxtjs\u002Fseo"," — the full Nuxt SEO bundle is available to you out of the box, including ",[361,366,367],{},"useSeoMeta",", ",[361,370,371],{},"useSchemaOrg",", robots meta, sitemap generation, and OG image support. CWA layers on top of it with API-driven site config and automatic per-page meta from your Page and PageData records.",[351,374,375,376,379],{},"Site-wide settings are stored in the API and cached in Pinia. Admins change them at ",[361,377,378],{},"\u002F_cwa\u002Fsettings"," — no deploy required.",[381,382,384],"h2",{"id":383},"default-settings","Default Settings",[351,386,387],{},"The module ships with sensible defaults:",[389,390,391,407],"table",{},[392,393,394],"thead",{},[395,396,397,401,404],"tr",{},[398,399,400],"th",{},"Key",[398,402,403],{},"Default",[398,405,406],{},"Description",[408,409,410,430,448,466,480,495,513,528,542,556],"tbody",{},[395,411,412,418,423],{},[413,414,415],"td",{},[361,416,417],{},"siteName",[413,419,420],{},[361,421,422],{},"'CWA Web App'",[413,424,425,426,429],{},"Used in ",[361,427,428],{},"\u003Ctitle>"," concatenation",[395,431,432,437,442],{},[413,433,434],{},[361,435,436],{},"fallbackTitle",[413,438,439],{},[361,440,441],{},"true",[413,443,444,445,447],{},"Show ",[361,446,417],{}," when a page has no title",[395,449,450,455,459],{},[413,451,452],{},[361,453,454],{},"concatTitle",[413,456,457],{},[361,458,441],{},[413,460,461,462,465],{},"Append ",[361,463,464],{}," | siteName"," to page titles",[395,467,468,473,477],{},[413,469,470],{},[361,471,472],{},"indexable",[413,474,475],{},[361,476,441],{},[413,478,479],{},"Whether search engines should index the site",[395,481,482,487,492],{},[413,483,484],{},[361,485,486],{},"canonicalUrl",[413,488,489],{},[361,490,491],{},"''",[413,493,494],{},"Base URL for canonical tags",[395,496,497,502,506],{},[413,498,499],{},[361,500,501],{},"sitemapEnabled",[413,503,504],{},[361,505,441],{},[413,507,508,509,512],{},"Generate ",[361,510,511],{},"\u002Fsitemap.xml"," from routes",[395,514,515,520,525],{},[413,516,517],{},[361,518,519],{},"maintenanceModeEnabled",[413,521,522],{},[361,523,524],{},"false",[413,526,527],{},"Redirect all non-admin visitors to maintenance page",[395,529,530,535,539],{},[413,531,532],{},[361,533,534],{},"robotsText",[413,536,537],{},[361,538,491],{},[413,540,541],{},"Custom robots.txt content",[395,543,544,549,553],{},[413,545,546],{},[361,547,548],{},"robotsAllowNonSeoCrawlers",[413,550,551],{},[361,552,441],{},[413,554,555],{},"Allow non-SEO bots",[395,557,558,563,567],{},[413,559,560],{},[361,561,562],{},"robotsAllowAiBots",[413,564,565],{},[361,566,441],{},[413,568,569],{},"Allow AI crawlers",[381,571,573],{"id":572},"accessing-site-config","Accessing Site Config",[351,575,576,577,580],{},"Use ",[361,578,579],{},"cwa.siteConfig.config"," — it's a reactive store getter:",[582,583,588],"pre",{"className":584,"code":585,"language":586,"meta":587,"style":587},"language-ts shiki shiki-themes github-light github-dark material-theme-palenight","const cwa = useCwa()\n\nconst siteName = computed(() => cwa.siteConfig.config.value?.siteName)\nconst isMaintenanceMode = computed(() => cwa.siteConfig.config.value?.maintenanceModeEnabled)\nconst sitemapEnabled = computed(() => cwa.siteConfig.config.value?.sitemapEnabled)\n","ts","",[361,589,590,615,622,669,706],{"__ignoreMap":587},[591,592,595,599,603,607,611],"span",{"class":593,"line":594},"line",1,[591,596,598],{"class":597},"swB56","const",[591,600,602],{"class":601},"sc2zw"," cwa",[591,604,606],{"class":605},"sVlFx"," =",[591,608,610],{"class":609},"sKpYG"," useCwa",[591,612,614],{"class":613},"sPB8G","()\n",[591,616,618],{"class":593,"line":617},2,[591,619,621],{"emptyLinePlaceholder":620},true,"\n",[591,623,625,627,630,632,635,638,642,645,647,650,653,655,658,660,663,666],{"class":593,"line":624},3,[591,626,598],{"class":597},[591,628,629],{"class":601}," siteName",[591,631,606],{"class":605},[591,633,634],{"class":609}," computed",[591,636,637],{"class":613},"(",[591,639,641],{"class":640},"sOvfz","()",[591,643,644],{"class":597}," =>",[591,646,602],{"class":613},[591,648,649],{"class":640},".",[591,651,652],{"class":613},"siteConfig",[591,654,649],{"class":640},[591,656,657],{"class":613},"config",[591,659,649],{"class":640},[591,661,662],{"class":613},"value",[591,664,665],{"class":640},"?.",[591,667,668],{"class":613},"siteName)\n",[591,670,672,674,677,679,681,683,685,687,689,691,693,695,697,699,701,703],{"class":593,"line":671},4,[591,673,598],{"class":597},[591,675,676],{"class":601}," isMaintenanceMode",[591,678,606],{"class":605},[591,680,634],{"class":609},[591,682,637],{"class":613},[591,684,641],{"class":640},[591,686,644],{"class":597},[591,688,602],{"class":613},[591,690,649],{"class":640},[591,692,652],{"class":613},[591,694,649],{"class":640},[591,696,657],{"class":613},[591,698,649],{"class":640},[591,700,662],{"class":613},[591,702,665],{"class":640},[591,704,705],{"class":613},"maintenanceModeEnabled)\n",[591,707,709,711,714,716,718,720,722,724,726,728,730,732,734,736,738,740],{"class":593,"line":708},5,[591,710,598],{"class":597},[591,712,713],{"class":601}," sitemapEnabled",[591,715,606],{"class":605},[591,717,634],{"class":609},[591,719,637],{"class":613},[591,721,641],{"class":640},[591,723,644],{"class":597},[591,725,602],{"class":613},[591,727,649],{"class":640},[591,729,652],{"class":613},[591,731,649],{"class":640},[591,733,657],{"class":613},[591,735,649],{"class":640},[591,737,662],{"class":613},[591,739,665],{"class":640},[591,741,742],{"class":613},"sitemapEnabled)\n",[351,744,745,746,749],{},"Or use ",[361,747,748],{},"useCwaSiteConfig"," directly for utility functions:",[582,751,753],{"className":584,"code":752,"language":586,"meta":587,"style":587},"import { useCwaSiteConfig } from '#imports'\nconst { defaultSiteConfig } = useCwaSiteConfig()\n",[361,754,755,784],{"__ignoreMap":587},[591,756,757,761,764,767,770,773,777,781],{"class":593,"line":594},[591,758,760],{"class":759},"sm4w6","import",[591,762,763],{"class":640}," {",[591,765,766],{"class":613}," useCwaSiteConfig",[591,768,769],{"class":640}," }",[591,771,772],{"class":759}," from",[591,774,776],{"class":775},"seSrl"," '",[591,778,780],{"class":779},"sLL54","#imports",[591,782,783],{"class":775},"'\n",[591,785,786,788,790,793,795,797,799],{"class":593,"line":617},[591,787,598],{"class":597},[591,789,763],{"class":640},[591,791,792],{"class":601}," defaultSiteConfig",[591,794,769],{"class":640},[591,796,606],{"class":605},[591,798,766],{"class":609},[591,800,614],{"class":613},[381,802,804],{"id":803},"saving-config-changes-admin","Saving Config Changes (Admin)",[582,806,808],{"className":584,"code":807,"language":586,"meta":587,"style":587},"const result = cwa.siteConfig.saveConfig({\n    siteName: 'My Rebranded Site',\n    maintenanceModeEnabled: false,\n    robotsAllowAiBots: false\n})\n\n\u002F\u002F result.totalConfigsChanged — number of keys that actually changed\n\u002F\u002F Only changed keys are PATCHed to the API\n",[361,809,810,835,855,868,878,886,891,898],{"__ignoreMap":587},[591,811,812,814,817,819,821,823,825,827,830,832],{"class":593,"line":594},[591,813,598],{"class":597},[591,815,816],{"class":601}," result",[591,818,606],{"class":605},[591,820,602],{"class":613},[591,822,649],{"class":640},[591,824,652],{"class":613},[591,826,649],{"class":640},[591,828,829],{"class":609},"saveConfig",[591,831,637],{"class":613},[591,833,834],{"class":640},"{\n",[591,836,837,841,844,846,849,852],{"class":593,"line":617},[591,838,840],{"class":839},"sDHlG","    siteName",[591,842,843],{"class":640},":",[591,845,776],{"class":775},[591,847,848],{"class":779},"My Rebranded Site",[591,850,851],{"class":775},"'",[591,853,854],{"class":640},",\n",[591,856,857,860,862,866],{"class":593,"line":624},[591,858,859],{"class":839},"    maintenanceModeEnabled",[591,861,843],{"class":640},[591,863,865],{"class":864},"swWMF"," false",[591,867,854],{"class":640},[591,869,870,873,875],{"class":593,"line":671},[591,871,872],{"class":839},"    robotsAllowAiBots",[591,874,843],{"class":640},[591,876,877],{"class":864}," false\n",[591,879,880,883],{"class":593,"line":708},[591,881,882],{"class":640},"}",[591,884,885],{"class":613},")\n",[591,887,889],{"class":593,"line":888},6,[591,890,621],{"emptyLinePlaceholder":620},[591,892,894],{"class":593,"line":893},7,[591,895,897],{"class":896},"sTBSN","\u002F\u002F result.totalConfigsChanged — number of keys that actually changed\n",[591,899,901],{"class":593,"line":900},8,[591,902,903],{"class":896},"\u002F\u002F Only changed keys are PATCHed to the API\n",[381,905,907],{"id":906},"per-page-seo","Per-Page SEO",[351,909,910],{},"The route resolution middleware automatically applies SEO meta tags from the current page or page data:",[389,912,913,923],{},[392,914,915],{},[395,916,917,920],{},[398,918,919],{},"Source",[398,921,922],{},"Applied as",[408,924,925,936,948,960],{},[395,926,927,932],{},[413,928,929],{},[361,930,931],{},"Page.title",[413,933,934],{},[361,935,428],{},[395,937,938,943],{},[413,939,940],{},[361,941,942],{},"Page.metaDescription",[413,944,945],{},[361,946,947],{},"\u003Cmeta name=\"description\">",[395,949,950,955],{},[413,951,952],{},[361,953,954],{},"PageData.title",[413,956,957,958],{},"Overrides ",[361,959,931],{},[395,961,962,967],{},[413,963,964],{},[361,965,966],{},"PageData.metaDescription",[413,968,957,969],{},[361,970,942],{},[351,972,973,974,976,977,980],{},"These are wired into ",[361,975,363],{}," via ",[361,978,979],{},"useSeoMeta()",". You can add your own after the middleware runs and your call will win:",[582,982,984],{"className":584,"code":983,"language":586,"meta":587,"style":587},"\u002F\u002F In a page template component\nuseHead({\n    title: computed(() => `${articleHeadline.value} - In-depth Guide`)\n})\n",[361,985,986,991,1000,1035],{"__ignoreMap":587},[591,987,988],{"class":593,"line":594},[591,989,990],{"class":896},"\u002F\u002F In a page template component\n",[591,992,993,996,998],{"class":593,"line":617},[591,994,995],{"class":609},"useHead",[591,997,637],{"class":613},[591,999,834],{"class":640},[591,1001,1002,1005,1007,1009,1011,1013,1015,1018,1021,1023,1025,1027,1030,1033],{"class":593,"line":624},[591,1003,1004],{"class":839},"    title",[591,1006,843],{"class":640},[591,1008,634],{"class":609},[591,1010,637],{"class":613},[591,1012,641],{"class":640},[591,1014,644],{"class":597},[591,1016,1017],{"class":775}," `${",[591,1019,1020],{"class":613},"articleHeadline",[591,1022,649],{"class":775},[591,1024,662],{"class":613},[591,1026,882],{"class":775},[591,1028,1029],{"class":779}," - In-depth Guide",[591,1031,1032],{"class":775},"`",[591,1034,885],{"class":613},[591,1036,1037,1039],{"class":593,"line":671},[591,1038,882],{"class":640},[591,1040,885],{"class":613},[381,1042,1044],{"id":1043},"default-og-image","Default OG Image",[351,1046,1047,1048,1055],{},"The module ships a default Open Graph image template via ",[355,1049,1052],{"href":1050,"rel":1051},"https:\u002F\u002Fnuxtseo.com\u002Fog-image",[359],[361,1053,1054],{},"nuxt-og-image",". Every CWA page automatically gets a dark-background social card containing the CWA logo, the page title, and the meta description — no setup required.",[351,1057,1058,1059,1062],{},"The template is ",[361,1060,1061],{},"CwaDefault.satori.vue"," (a Satori\u002FSVG renderer). It receives:",[389,1064,1065,1074],{},[392,1066,1067],{},[395,1068,1069,1072],{},[398,1070,1071],{},"Prop",[398,1073,919],{},[408,1075,1076,1086],{},[395,1077,1078,1083],{},[413,1079,1080],{},[361,1081,1082],{},"title",[413,1084,1085],{},"Current page or pageData title",[395,1087,1088,1093],{},[413,1089,1090],{},[361,1091,1092],{},"description",[413,1094,1095],{},"Current page or pageData meta description",[351,1097,1098,1102,1103,1106],{},[1099,1100,1101],"strong",{},"Previewing locally"," — visit ",[361,1104,1105],{},"\u002F__og-image__\u002Fimage\u002Fyour-path\u002Fog.png"," to preview the generated image for any route.",[1108,1109,1111],"h3",{"id":1110},"overriding-the-og-image","Overriding the OG image",[351,1113,1114,1117,1118,1121],{},[1099,1115,1116],{},"Per-page override"," — call ",[361,1119,1120],{},"defineOgImage()"," in your page template component. Your call replaces the module default for that route:",[582,1123,1125],{"className":584,"code":1124,"language":586,"meta":587,"style":587},"\u002F\u002F In your page template \u003Cscript setup>\ndefineOgImage('MyCustomTemplate', {\n    title: pageData.value?.data?.headline,\n    imageUrl: pageData.value?.data?.heroImage?.contentUrl\n})\n",[361,1126,1127,1132,1152,1177,1204],{"__ignoreMap":587},[591,1128,1129],{"class":593,"line":594},[591,1130,1131],{"class":896},"\u002F\u002F In your page template \u003Cscript setup>\n",[591,1133,1134,1137,1139,1141,1144,1146,1149],{"class":593,"line":617},[591,1135,1136],{"class":609},"defineOgImage",[591,1138,637],{"class":613},[591,1140,851],{"class":775},[591,1142,1143],{"class":779},"MyCustomTemplate",[591,1145,851],{"class":775},[591,1147,1148],{"class":640},",",[591,1150,1151],{"class":640}," {\n",[591,1153,1154,1156,1158,1161,1163,1165,1167,1170,1172,1175],{"class":593,"line":624},[591,1155,1004],{"class":839},[591,1157,843],{"class":640},[591,1159,1160],{"class":613}," pageData",[591,1162,649],{"class":640},[591,1164,662],{"class":613},[591,1166,665],{"class":640},[591,1168,1169],{"class":613},"data",[591,1171,665],{"class":640},[591,1173,1174],{"class":613},"headline",[591,1176,854],{"class":640},[591,1178,1179,1182,1184,1186,1188,1190,1192,1194,1196,1199,1201],{"class":593,"line":671},[591,1180,1181],{"class":839},"    imageUrl",[591,1183,843],{"class":640},[591,1185,1160],{"class":613},[591,1187,649],{"class":640},[591,1189,662],{"class":613},[591,1191,665],{"class":640},[591,1193,1169],{"class":613},[591,1195,665],{"class":640},[591,1197,1198],{"class":613},"heroImage",[591,1200,665],{"class":640},[591,1202,1203],{"class":613},"contentUrl\n",[591,1205,1206,1208],{"class":593,"line":708},[591,1207,882],{"class":640},[591,1209,885],{"class":613},[351,1211,1212,1215,1216,1219],{},[1099,1213,1214],{},"Project-wide override"," — create ",[361,1217,1218],{},"app\u002Fcomponents\u002Fog-image\u002FCwaDefault.satori.vue"," in your application. Nuxt resolves component names from the app layer first, so this shadows the module's default template for all pages that haven't overridden per-page.",[381,1221,1223],{"id":1222},"open-graph-and-twitter-cards","Open Graph and Twitter Cards",[351,1225,1226,1227,368,1230,368,1233,368,1236,1239],{},"Social card meta tags (",[361,1228,1229],{},"og:title",[361,1231,1232],{},"og:description",[361,1234,1235],{},"og:image",[361,1237,1238],{},"twitter:card",") are too content-specific for the module to set automatically — add them in your page templates alongside your own content fields:",[582,1241,1243],{"className":584,"code":1242,"language":586,"meta":587,"style":587},"useSeoMeta({\n    ogTitle: computed(() => pageData.value?.data?.headline),\n    ogDescription: computed(() => pageData.value?.data?.summary),\n    ogImage: computed(() => pageData.value?.data?.heroImage?.contentUrl),\n    twitterCard: 'summary_large_image'\n})\n",[361,1244,1245,1253,1285,1317,1353,1367],{"__ignoreMap":587},[591,1246,1247,1249,1251],{"class":593,"line":594},[591,1248,367],{"class":609},[591,1250,637],{"class":613},[591,1252,834],{"class":640},[591,1254,1255,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1283],{"class":593,"line":617},[591,1256,1257],{"class":839},"    ogTitle",[591,1259,843],{"class":640},[591,1261,634],{"class":609},[591,1263,637],{"class":613},[591,1265,641],{"class":640},[591,1267,644],{"class":597},[591,1269,1160],{"class":613},[591,1271,649],{"class":640},[591,1273,662],{"class":613},[591,1275,665],{"class":640},[591,1277,1169],{"class":613},[591,1279,665],{"class":640},[591,1281,1282],{"class":613},"headline)",[591,1284,854],{"class":640},[591,1286,1287,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1315],{"class":593,"line":624},[591,1288,1289],{"class":839},"    ogDescription",[591,1291,843],{"class":640},[591,1293,634],{"class":609},[591,1295,637],{"class":613},[591,1297,641],{"class":640},[591,1299,644],{"class":597},[591,1301,1160],{"class":613},[591,1303,649],{"class":640},[591,1305,662],{"class":613},[591,1307,665],{"class":640},[591,1309,1169],{"class":613},[591,1311,665],{"class":640},[591,1313,1314],{"class":613},"summary)",[591,1316,854],{"class":640},[591,1318,1319,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1351],{"class":593,"line":671},[591,1320,1321],{"class":839},"    ogImage",[591,1323,843],{"class":640},[591,1325,634],{"class":609},[591,1327,637],{"class":613},[591,1329,641],{"class":640},[591,1331,644],{"class":597},[591,1333,1160],{"class":613},[591,1335,649],{"class":640},[591,1337,662],{"class":613},[591,1339,665],{"class":640},[591,1341,1169],{"class":613},[591,1343,665],{"class":640},[591,1345,1198],{"class":613},[591,1347,665],{"class":640},[591,1349,1350],{"class":613},"contentUrl)",[591,1352,854],{"class":640},[591,1354,1355,1358,1360,1362,1365],{"class":593,"line":708},[591,1356,1357],{"class":839},"    twitterCard",[591,1359,843],{"class":640},[591,1361,776],{"class":775},[591,1363,1364],{"class":779},"summary_large_image",[591,1366,783],{"class":775},[591,1368,1369,1371],{"class":593,"line":888},[591,1370,882],{"class":640},[591,1372,885],{"class":613},[381,1374,1376],{"id":1375},"maintenance-mode","Maintenance Mode",[351,1378,1379,1380,1383,1384,1387],{},"When ",[361,1381,1382],{},"maintenanceModeEnabled: true",", the module redirects all non-admin visitors to ",[361,1385,1386],{},"\u002F_cwa\u002Fmaintenance",". Admins are not redirected and can still access the site to turn maintenance mode off.",[351,1389,1390,1391,649],{},"Override the maintenance page by creating ",[361,1392,1393],{},"app\u002Fpages\u002F_cwa\u002Fmaintenance.vue",[381,1395,1397],{"id":1396},"sitemap","Sitemap",[351,1399,1400,1402,1403,1406,1407,649],{},[361,1401,511],{}," is auto-generated from all ",[361,1404,1405],{},"Route"," resources in the API. Only published, public routes are included. Customise priority and changefreq per-route in the admin under ",[361,1408,1409],{},"\u002F_cwa\u002Froutes",[351,1411,1412],{},"Disable sitemap generation if you manage it externally:",[582,1414,1416],{"className":584,"code":1415,"language":586,"meta":587,"style":587},"\u002F\u002F Admin settings panel → Sitemap → Disabled\n\u002F\u002F Or programmatically:\ncwa.siteConfig.saveConfig({ sitemapEnabled: false })\n",[361,1417,1418,1423,1428],{"__ignoreMap":587},[591,1419,1420],{"class":593,"line":594},[591,1421,1422],{"class":896},"\u002F\u002F Admin settings panel → Sitemap → Disabled\n",[591,1424,1425],{"class":593,"line":617},[591,1426,1427],{"class":896},"\u002F\u002F Or programmatically:\n",[591,1429,1430,1433,1435,1437,1439,1441,1443,1446,1448,1450,1452,1454],{"class":593,"line":624},[591,1431,1432],{"class":613},"cwa",[591,1434,649],{"class":640},[591,1436,652],{"class":613},[591,1438,649],{"class":640},[591,1440,829],{"class":609},[591,1442,637],{"class":613},[591,1444,1445],{"class":640},"{",[591,1447,713],{"class":839},[591,1449,843],{"class":640},[591,1451,865],{"class":864},[591,1453,769],{"class":640},[591,1455,885],{"class":613},[381,1457,1459],{"id":1458},"nuxt-config-overrides-static-defaults","Nuxt Config Overrides (Static Defaults)",[351,1461,1462,1463,1466],{},"You can set site config defaults in ",[361,1464,1465],{},"nuxt.config"," — these are merged with the API's stored values, with the API winning for any key it defines:",[582,1468,1470],{"className":584,"code":1469,"language":586,"meta":587,"style":587},"\u002F\u002F nuxt.config.ts\ncwa: {\n    siteConfig: {\n        siteName: 'My App',\n        canonicalUrl: 'https:\u002F\u002Fwww.example.com'\n    }\n}\n",[361,1471,1472,1477,1486,1495,1511,1525,1530],{"__ignoreMap":587},[591,1473,1474],{"class":593,"line":594},[591,1475,1476],{"class":896},"\u002F\u002F nuxt.config.ts\n",[591,1478,1479,1482,1484],{"class":593,"line":617},[591,1480,1432],{"class":1481},"sRCss",[591,1483,843],{"class":640},[591,1485,1151],{"class":640},[591,1487,1488,1491,1493],{"class":593,"line":624},[591,1489,1490],{"class":1481},"    siteConfig",[591,1492,843],{"class":640},[591,1494,1151],{"class":640},[591,1496,1497,1500,1502,1504,1507,1509],{"class":593,"line":671},[591,1498,1499],{"class":1481},"        siteName",[591,1501,843],{"class":640},[591,1503,776],{"class":775},[591,1505,1506],{"class":779},"My App",[591,1508,851],{"class":775},[591,1510,854],{"class":640},[591,1512,1513,1516,1518,1520,1523],{"class":593,"line":708},[591,1514,1515],{"class":1481},"        canonicalUrl",[591,1517,843],{"class":640},[591,1519,776],{"class":775},[591,1521,1522],{"class":779},"https:\u002F\u002Fwww.example.com",[591,1524,783],{"class":775},[591,1526,1527],{"class":593,"line":888},[591,1528,1529],{"class":640},"    }\n",[591,1531,1532],{"class":593,"line":893},[591,1533,1534],{"class":640},"}\n",[351,1536,1537],{},"This lets you ship a sensible default without requiring a database record on first boot.",[1539,1540,1541],"style",{},"html pre.shiki code .swB56, html code.shiki .swB56{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .sc2zw, html code.shiki .sc2zw{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .sVlFx, html code.shiki .sVlFx{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .sKpYG, html code.shiki .sKpYG{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#82AAFF}html pre.shiki code .sPB8G, html code.shiki .sPB8G{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .sOvfz, html code.shiki .sOvfz{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sm4w6, html code.shiki .sm4w6{--shiki-light:#D73A49;--shiki-light-font-style:inherit;--shiki-default:#F97583;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .sDHlG, html code.shiki .sDHlG{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .swWMF, html code.shiki .swWMF{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FF9CAC}html pre.shiki code .sTBSN, html code.shiki .sTBSN{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sRCss, html code.shiki .sRCss{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}",{"title":587,"searchDepth":617,"depth":617,"links":1543},[1544,1545,1546,1547,1548,1551,1552,1553,1554],{"id":383,"depth":617,"text":384},{"id":572,"depth":617,"text":573},{"id":803,"depth":617,"text":804},{"id":906,"depth":617,"text":907},{"id":1043,"depth":617,"text":1044,"children":1549},[1550],{"id":1110,"depth":624,"text":1111},{"id":1222,"depth":617,"text":1223},{"id":1375,"depth":617,"text":1376},{"id":1396,"depth":617,"text":1397},{"id":1458,"depth":617,"text":1459},"Admin settings panel, siteConfig API, per-page SEO from page data, sitemap, maintenance mode, and robots configuration.","md",null,{},{"title":159,"description":1555},"y4wFYrIEefnU5PhPI2ap9BVSuREhEMPCkVJku2pXSF0",[1562,1564],{"title":155,"path":156,"stem":157,"description":1563,"children":-1},"[object Object]",{"title":168,"path":169,"stem":170,"description":1565,"children":-1},"How to create CWA layout components that form the outer shell of your site — header, footer, navigation, and component group regions.",1782241284439]