Table Of Contents
Who is this for
Summary
The Content Architecture Record is the per-page strategy payload SCOS outputs to the browser. It includes cluster, topic, maturity, intent, purpose, pillar, service pathway, and content metrics so GA4 events and external tools can read strategy context without scraping the admin. This page documents the injected object shape — expand it into a full setup guide when you wire CAR on a new site.
Content Architecture Post meta keys
The full Content Architecture storage map. Canonical registration is in Meta_Fields.php; taxonomy registration is in Taxonomies.php.
Important distinction: Primary Cluster and Topic are taxonomy assignments (wp_set_post_terms / wp_get_post_terms), not post meta. Only Supporting Topics are stored as post meta (scos_ca_supporting_topics).
Taxonomies
per post — not scos_ca_* post meta
| Storage | Slug | How set/read |
|---|---|---|
| Content Cluster | scos_content_cluster | Meta_Box.php, Admin_Columns.php via wp_set_post_terms() / wp_get_post_terms() |
| Primary Topic | scos_topic | Same |
Term meta (on scos_topic terms only, not posts):
| Key | API | Purpose |
|---|---|---|
scos_topic_same_as | get_term_meta / update_term_meta / delete_term_meta | Wikidata/sameAs URL on topic edit screen (Taxonomies.php) |
Admin column labels scos_ca_cluster and scos_ca_topic are UI column IDs only — they read from the taxonomies above, not from post meta.
1. Content Architecture meta keys on single posts (strategy / CAR)
- User-editable strategy classification.
- Written via the Content Architecture metabox, quick-edit, or bulk-edit.
| Post meta key | Type | Read | Write |
|---|---|---|---|
scos_ca_intent | string (slug) | Meta_Box.php, Admin_Columns.php, scos-car-injection.php, Airtable/social APIs | Meta_Box.php, Admin_Columns.php, CA_Defaults.php (auto on publish if empty) |
scos_ca_purpose | string (slug) | Same | Same |
scos_ca_maturity | string (slug) | Same | Meta_Box.php, Admin_Columns.php |
scos_ca_pillar_page_id | int (post ID) | Meta_Box.php, Admin_Columns.php, scos-car-injection.php | Meta_Box.php, Admin_Columns.php |
scos_ca_service_pathway_id | int (post ID) | Same | Same |
scos_ca_supporting_topics | int[] (term IDs) | Meta_Box.php | Meta_Box.php — not register_post_meta; extra scos_topic IDs beyond primary |
scos_ca_intent_goal | string (textarea) | Meta_Box.php, Intent_Goal_Resolver.php, scos-car-injection.php, Airtable | Meta_Box.php — only when no FAQ is linked |
scos_ca_intent_goal_faq_id | int (FAQ post ID) | Intent_Goal_Resolver.php, Meta_Box.php, FAQ_Module.php (reverse query) | Meta_Box.php, Intent_Goal_Resolver.php |
Registered in Meta_Fields.php lines 62–68 — all except scos_ca_supporting_topics.
Intent goal resolution: When scos_ca_intent_goal_faq_id is set, Intent_Goal_Resolver reads the linked FAQ’s title/content instead of scos_ca_intent_goal freetext.
2. Analysis meta keys on single posts (auto-populated)
- Written by
Content_Analysis.phponsave_post. - Read-only in the metabox UI.
| Post meta key | Type | Written by | Also read by |
|---|---|---|---|
scos_ca_word_count | int | Content_Analysis.php | Meta_Box.php, class-content-stats-page.php, scos-car-injection.php |
scos_ca_h2_count | int | Same | Meta_Box.php, class-content-stats-page.php |
scos_ca_image_count | int | Same | Same |
scos_ca_reading_time | int (minutes) | Same | Meta_Box.php, scos-car-injection.php |
scos_ca_reading_time_iso | string (PT{n}M) | Same | — |
scos_ca_links_to_internal | int | Same | Meta_Box.php, class-content-stats-page.php, scos-car-injection.php |
scos_ca_links_to_external | int | Same | Same |
scos_ca_links_to_internal_list | array | Same | Meta_Box.php |
scos_ca_links_to_external_list | array | Same | Meta_Box.php |
scos_ca_last_analyzed | string (datetime) | Same | Meta_Box.php, class-content-stats-page.php — also delete_post_meta for bulk re-analysis |
scos_ca_schema_track | string[] (@type list) | Same | Registered for MCP/audit; not shown in metabox |
3. Workflow meta keys on single posts
Editorial / indexing workflow. User-editable via metabox, quick-edit, bulk-edit.
| Post meta key | Type | Values (from Meta_Fields.php) | Read | Write |
|---|---|---|---|---|
scos_ca_index_status | string | crawled, discovered, indexed, requested, issue, no_index | Meta_Box.php, Admin_Columns.php | Same |
scos_ca_optimization_progress | string[] | idea, content, entities-semantics, conversion, seo-basic, seo-advanced, authority-outreach, amplification | Same | Same |
scos_ca_next_step | string | approve, testing, revise, merge, archive | Same | Same |
4. Content Strategy Options Keys
Site-wide wp_options — scos_ca_strategy_* (8 keys)
- Displayed read-only on CA Overview (
Admin_Menu.php). - MCP-only writes — no
update_option()for these keys
| Option key |
|---|
scos_ca_strategy_known_for_position |
scos_ca_strategy_maturity_start |
scos_ca_strategy_maturity_goal |
scos_ca_strategy_geographic_scope |
scos_ca_strategy_target_market |
scos_ca_strategy_content_gaps |
scos_ca_strategy_recommendation |
scos_ca_strategy_outcome_goal |
Content Architecture Airtable sync config
- Content Architecture “Integrations tab”
wp_options—scos_car_*- Prefix is
scos_car_notscos_ca_, but lives under the CA admin menu.
| Option key | get_option / update_option |
|---|---|
scos_car_airtable_token | Admin_Menu.php (dual-writes bw_airtable_api_token) |
scos_car_airtable_base_id | → bw_airtable_base_id |
scos_car_airtable_table_id | → bw_airtable_table_id |
scos_car_airtable_altc_id | → bw_airtable_altc_table_id |
scos_car_airtable_topics_id | → bw_airtable_topics_table_id |
Cross-module reverse link (FAQ CPT)
| Key | Notes |
|---|---|
scos_ca_intent_goal_faq_id on source post | Listed in §1; FAQ module queries posts where this meta = FAQ ID |
scos_faq_is_intent_goal on FAQ post | FAQ module meta (not scos_ca_*); set when linked as intent goal |
WP-CLI cheat sheet
scos_ca_intent, scos_ca_purpose, scos_ca_maturity,
scos_ca_pillar_page_id, scos_ca_service_pathway_id, scos_ca_supporting_topics,
scos_ca_intent_goal, scos_ca_intent_goal_faq_id,
scos_ca_index_status, scos_ca_optimization_progress, scos_ca_next_step,
scos_ca_word_count, scos_ca_h2_count, scos_ca_image_count,
scos_ca_reading_time, scos_ca_reading_time_iso,
scos_ca_links_to_internal, scos_ca_links_to_external,
scos_ca_links_to_internal_list, scos_ca_links_to_external_list,
scos_ca_last_analyzed, scos_ca_schema_track
Taxonomies (per post): scos_content_cluster, scos_topic
Term meta: scos_topic_same_as
Options: 8× scos_ca_strategy_* + 5× scos_car_*
Count: 21 distinct scos_ca_* post meta keys + 2 taxonomies + 1 term meta + 13 options (8 strategy + 5 integrations).Content Architecture Record
Prints per post on singles
window.brighterSCOS = {
"car": {
"cluster": "not_set", // ← from scos_ca_maturity ✓
"topic": "not_set", // ← from scos_ca_maturity ✓
"maturity": "learner", // ← from scos_ca_maturity ✓
"intent": "not_set", // ← from scos_ca_maturity ✓
"search-intent": "not_set", // ← from scos_ca_maturity ✓
"purpose": "not_set", // ← from scos_ca_maturity ✓
"pillar": { "id": 38, "title": "...", "type": "pillar" }, // ← from scos_ca_pillar_page_id ✓
"service_pathway": null, // ← from scos_ca_maturity ✓
"metrics": { ... } // ← from scos_ca_maturity ✓
},
"meta": {
"post_id": 74, // ← from scos_ca_maturity ✓
"post_type": "post", // ← from scos_ca_maturity ✓
"scos_version": "4.4.0", // ← from scos_ca_maturity ✓
"car_generated": "2026-03-19T..." // ← from scos_ca_maturity ✓
}
};Runtime note: scos-car-injection.php outputs window.scosCAR (not window.brighterSCOS). GA4 reads window.scosCAR || {} in brighter-ga4-enhanced.js. API docs still say brighterSCOS in places — that’s stale naming.
Comments below are documentation only — they do not appear in the <head> output (PHP builds JSON; no inline // in the script).
Content Architecture Record
Prints per post on singles (and front page when set).
Archives get a minimal not_set CAR with post_id: 0.
// SCOS Content Architecture Record — semantic intent and topical authority mapping.
window.scosCAR = {
"car": {
"cluster": "Website Strategy", // ← scos_content_cluster taxonomy (term name); fallback: bw_primary_altc_id / altc_strategic_lens
"topic": "Core Web Vitals", // ← scos_topic taxonomy (term name); fallback: bw_primary_topic_id / altc_topic / bw_page_topic
"maturity": "professional", // ← scos_ca_maturity; fallback: bw_cont_maturity
"intent": "informational", // ← scos_ca_intent; fallback: bw_intent
"search-intent": "How do I fix LCP?", // ← Intent_Goal_Resolver::resolve_question() → scos_ca_intent_goal_faq_id (FAQ title) → scos_ca_intent_goal → bw_search_intent → bw_altc_notes
"purpose": "supporting", // ← scos_ca_purpose; fallback: bw_purpose
"pillar": { // ← scos_ca_pillar_page_id; fallback: bw_pillar_page_id
"id": 38,
"title": "Performance Optimisation",
"type": "pillar" // type = "service" when linked post's scos_ca_purpose === "service-page"
},
"service_pathway": { // ← scos_ca_service_pathway_id; fallback: bw_service_pathway_id; null if unset
"id": 52,
"title": "Website Audits"
},
"metrics": { // ← analysis meta (auto-written by Content_Analysis)
"word_count": 1842, // scos_ca_word_count → bw_word_count
"reading_time": 9, // scos_ca_reading_time → bw_reading_time
"internal_links": 6, // scos_ca_links_to_internal → bw_internal_link_count
"external_links": 2, // scos_ca_links_to_external → bw_external_link_count
"last_updated": "2026-03-19" // get_the_modified_date() — not a meta key
}
},
"meta": {
"post_id": 74, // ← get_the_ID() on singular; page_on_front on static front page; 0 on archives
"post_type": "post", // ← get_post_type( $post_id )
"scos_version": "4.4.0", // ← SCOS_VERSION constant (fallback literal)
"car_generated": "2026-03-19T12:34:56+10:00" // ← current_time( 'c' ) at render — not stored
}
};Quick reference table
| CAR key | Primary source | Legacy fallback |
|---|---|---|
car.cluster | scos_content_cluster term name | bw_primary_altc_id / altc_strategic_lens |
car.topic | scos_topic term name | bw_primary_topic_id / altc_topic / bw_page_topic |
car.maturity | scos_ca_maturity | bw_cont_maturity |
car.intent | scos_ca_intent | bw_intent |
car.search-intent | FAQ title via scos_ca_intent_goal_faq_id, else scos_ca_intent_goal | bw_search_intent → bw_altc_notes |
car.purpose | scos_ca_purpose | bw_purpose |
car.pillar | scos_ca_pillar_page_id | bw_pillar_page_id |
car.service_pathway | scos_ca_service_pathway_id | bw_service_pathway_id |
car.metrics.* | scos_ca_* analysis keys | matching bw_* count fields |
meta.post_id | WP post context | — |
meta.post_type | WP post type | 'archive' when no post |
meta.scos_version | SCOS_VERSION | '4.4.0' |
meta.car_generated | server timestamp | — |
Not in CAR output
These CA fields exist in the metabox but are not injected into window.scosCAR:
scos_ca_supporting_topicsscos_ca_index_statusscos_ca_optimization_progressscos_ca_next_stepscos_ca_schema_track- Link inventory arrays (
scos_ca_links_to_*_list) scos_ca_h2_count,scos_ca_image_count,scos_ca_last_analyzed
Gate
CAR only outputs when SCOS_CA_ACTIVE is defined (Content Architecture module active). Otherwise nothing is printed to <head>.