brighter websites logoBrighter Websites Logo White

Content Architecture Record

How the Content Architecture Record (CAR) JSON is injected on the front end for GA4 and AI tools.

Content Architecture

Table Of Contents

Who is this for

Agency devs / future maintainers
Overview

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.

This page currently shows the CAR JavaScript object structure. Treat it as a technical reference while fuller editorial guidance is drafted.

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

StorageSlugHow set/read
Content Clusterscos_content_clusterMeta_Box.phpAdmin_Columns.php via wp_set_post_terms() / wp_get_post_terms()
Primary Topicscos_topicSame

Term meta (on scos_topic terms only, not posts):

KeyAPIPurpose
scos_topic_same_asget_term_meta / update_term_meta / delete_term_metaWikidata/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 keyTypeReadWrite
scos_ca_intentstring (slug)Meta_Box.phpAdmin_Columns.phpscos-car-injection.php, Airtable/social APIsMeta_Box.phpAdmin_Columns.phpCA_Defaults.php (auto on publish if empty)
scos_ca_purposestring (slug)SameSame
scos_ca_maturitystring (slug)SameMeta_Box.phpAdmin_Columns.php
scos_ca_pillar_page_idint (post ID)Meta_Box.phpAdmin_Columns.phpscos-car-injection.phpMeta_Box.phpAdmin_Columns.php
scos_ca_service_pathway_idint (post ID)SameSame
scos_ca_supporting_topicsint[] (term IDs)Meta_Box.phpMeta_Box.php — not register_post_meta; extra scos_topic IDs beyond primary
scos_ca_intent_goalstring (textarea)Meta_Box.phpIntent_Goal_Resolver.phpscos-car-injection.php, AirtableMeta_Box.php — only when no FAQ is linked
scos_ca_intent_goal_faq_idint (FAQ post ID)Intent_Goal_Resolver.phpMeta_Box.phpFAQ_Module.php (reverse query)Meta_Box.phpIntent_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.php on save_post.
  • Read-only in the metabox UI.
Post meta keyTypeWritten byAlso read by
scos_ca_word_countintContent_Analysis.phpMeta_Box.phpclass-content-stats-page.phpscos-car-injection.php
scos_ca_h2_countintSameMeta_Box.phpclass-content-stats-page.php
scos_ca_image_countintSameSame
scos_ca_reading_timeint (minutes)SameMeta_Box.phpscos-car-injection.php
scos_ca_reading_time_isostring (PT{n}M)Same
scos_ca_links_to_internalintSameMeta_Box.phpclass-content-stats-page.phpscos-car-injection.php
scos_ca_links_to_externalintSameSame
scos_ca_links_to_internal_listarraySameMeta_Box.php
scos_ca_links_to_external_listarraySameMeta_Box.php
scos_ca_last_analyzedstring (datetime)SameMeta_Box.phpclass-content-stats-page.php — also delete_post_meta for bulk re-analysis
scos_ca_schema_trackstring[] (@type list)SameRegistered 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 keyTypeValues (from Meta_Fields.php)ReadWrite
scos_ca_index_statusstringcrawleddiscoveredindexedrequestedissueno_indexMeta_Box.phpAdmin_Columns.phpSame
scos_ca_optimization_progressstring[]ideacontententities-semanticsconversionseo-basicseo-advancedauthority-outreachamplificationSameSame
scos_ca_next_stepstringapprovetestingrevisemergearchiveSameSame

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_ not scos_ca_, but lives under the CA admin menu.
Option keyget_option / update_option
scos_car_airtable_tokenAdmin_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)

KeyNotes
scos_ca_intent_goal_faq_id on source postListed in §1; FAQ module queries posts where this meta = FAQ ID
scos_faq_is_intent_goal on FAQ postFAQ 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 keyPrimary sourceLegacy fallback
car.clusterscos_content_cluster term namebw_primary_altc_id / altc_strategic_lens
car.topicscos_topic term namebw_primary_topic_id / altc_topic / bw_page_topic
car.maturityscos_ca_maturitybw_cont_maturity
car.intentscos_ca_intentbw_intent
car.search-intentFAQ title via scos_ca_intent_goal_faq_id, else scos_ca_intent_goalbw_search_intent → bw_altc_notes
car.purposescos_ca_purposebw_purpose
car.pillarscos_ca_pillar_page_idbw_pillar_page_id
car.service_pathwayscos_ca_service_pathway_idbw_service_pathway_id
car.metrics.*scos_ca_* analysis keysmatching bw_* count fields
meta.post_idWP post context
meta.post_typeWP post type'archive' when no post
meta.scos_versionSCOS_VERSION'4.4.0'
meta.car_generatedserver timestamp

Not in CAR output

These CA fields exist in the metabox but are not injected into window.scosCAR:

  • scos_ca_supporting_topics
  • scos_ca_index_status
  • scos_ca_optimization_progress
  • scos_ca_next_step
  • scos_ca_schema_track
  • Link inventory arrays (scos_ca_links_to_*_list)
  • scos_ca_h2_countscos_ca_image_countscos_ca_last_analyzed

Gate

CAR only outputs when SCOS_CA_ACTIVE is defined (Content Architecture module active). Otherwise nothing is printed to <head>.

Want to Contribute to SCOS?

SCOS is a Strategic Content Operating System - learn more or contact us on support@brighterwebsites.com.au.

Work with me

Hit submit and I’ll reach out by email or phone to help you get started. Your details stay private,  see the Privacy Policy.