Playbook: Campaign Site Structure for Marketers
Last updated: 2026-03-06
1. Purpose and when to use this
Use this playbook when you want campaign-specific detail pages on links.10x.in, each with a unique slug, structured schema JSON, and optional login gating (FREE_WITH_LOGIN).
Typical marketer goals:
- Launch campaigns with reusable page structure blocks.
- Reuse one campaign framework across channels with small schema changes.
- Keep sensitive campaign content visible only to authenticated visitors.
- Enable API/MCP-driven content operations for fast experimentation.
2. What this feature gives you
- One campaign can reference one detail page slug (
detailsPageSlug) for direct lookup. - Page metadata stores campaign structure references (
campaignId,schemaS3Key,schemaVersion,structureType). - Schema JSON is versioned in S3 with deterministic keys:
site-structure/{handle}/campaigns/{campaignId}/v{version}.json- Routes available via JWT control-plane and PAT public-handle endpoints.
- MCP tools available:
campaign_structure_getcampaign_structure_upsertcampaign_structure_publish
3. Marketer use-case matrix
| Marketing purpose | Recommended page setup | Schema emphasis | Access mode |
|---|---|---|---|
| Product launch | Full long-form campaign page + FAQs + CTA strip | hero, proof, offer ladder, CTA IDs | FREE_WITH_LOGIN when pre-launch; PUBLIC post-launch |
| Lead magnet | Short promise page + form + social proof | lead form module, attribution metadata | FREE_WITH_LOGIN |
| Webinar / event registration | Session agenda + speaker block + registration CTA | schedule sections, seat limits, event metadata | FREE_WITH_LOGIN |
| Retargeting campaign | Variant-specific headline/offer by segment | segment/module mapping, retarget tags | FREE_WITH_LOGIN |
| Influencer or partner campaign | Partner-specific narrative and compliance footer | partner metadata, source tags, legal block | PUBLIC or FREE_WITH_LOGIN |
| Regional offer page | Geo/currency-specific variants | region modules, pricing/currency config | FREE_WITH_LOGIN until QA passes |
4. Channel workflow options
Option A: Local marketer app
Use the local app built for this flow:
apps/site-structure-web- Set
API Base URL,PAT,handle,campaignId. - Run
Fetch,Upsert, thenPublish (FREE_WITH_LOGIN).
Option B: API automation
PAT routes:
PUT /v2/public/handles/{handle}/site-structure/campaigns/{campaignId}GET /v2/public/handles/{handle}/site-structure/campaigns/{campaignId}POST /v2/public/handles/{handle}/site-structure/campaigns/{campaignId}/publish
Required scopes:
pages.readfor fetchpages.writefor upsert/publish
Option C: MCP-assisted operations
From connected assistants/tools:
campaign_structure_getfor retrieval and QA checkscampaign_structure_upsertfor schema editscampaign_structure_publishfor controlled release
OAuth/PAT scope requirements mirror API:
pages.readpages.write
5. Minimal schema examples by purpose
Product launch
{
"modules": [
{ "id": "hero", "type": "hero_banner" },
{ "id": "proof", "type": "social_proof" },
{ "id": "offer", "type": "offer_grid" },
{ "id": "faq", "type": "faq" }
],
"seo": { "title": "Spring Launch" }
}
Lead capture
{
"modules": [
{ "id": "hero", "type": "lead_hook" },
{ "id": "form", "type": "email_capture" }
],
"tracking": { "primaryEvent": "lead" }
}
Webinar registration
{
"modules": [
{ "id": "hero", "type": "event_hero" },
{ "id": "agenda", "type": "timeline" },
{ "id": "speakers", "type": "speaker_cards" },
{ "id": "cta", "type": "registration_cta" }
],
"event": { "capacity": 500 }
}
6. Industry presets (ready-to-copy schema kits)
Use these as base kits in campaign_structure_upsert.payload.schema, then edit labels/content IDs.
Ecommerce preset
{
"modules": [
{ "id": "hero", "type": "hero_banner", "variant": "product_drop" },
{ "id": "price", "type": "price_compare" },
{ "id": "proof", "type": "social_proof" },
{ "id": "faq", "type": "faq" },
{ "id": "cta", "type": "checkout_cta" }
],
"commerce": {
"primaryEvent": "purchase",
"currency": "USD",
"inventoryHint": "limited"
},
"segmentation": {
"audiences": ["new_visitor", "cart_abandoner", "vip_repeat"]
},
"seo": { "title": "Campaign Offer | Brand" }
}
B2B SaaS preset
{
"modules": [
{ "id": "hero", "type": "value_prop_hero" },
{ "id": "pain", "type": "pain_points" },
{ "id": "features", "type": "feature_grid" },
{ "id": "proof", "type": "case_study_cards" },
{ "id": "roi", "type": "roi_calculator" },
{ "id": "cta", "type": "demo_request_form" }
],
"lead": {
"primaryEvent": "lead",
"qualificationFields": ["team_size", "role", "timeline"]
},
"segmentation": {
"audiences": ["cold_prospect", "retargeted_visitor", "high_intent_trial"]
},
"seo": { "title": "See How Product Solves <Problem>" }
}
Events preset
{
"modules": [
{ "id": "hero", "type": "event_hero" },
{ "id": "agenda", "type": "timeline" },
{ "id": "speakers", "type": "speaker_cards" },
{ "id": "venue", "type": "venue_map" },
{ "id": "cta", "type": "registration_cta" },
{ "id": "waitlist", "type": "waitlist_form" }
],
"event": {
"primaryEvent": "registration",
"timezone": "America/New_York",
"capacity": 500
},
"segmentation": {
"audiences": ["early_access", "general_admission", "partner_invite"]
},
"seo": { "title": "Event Name 2026 | Register Now" }
}
Creators preset
{
"modules": [
{ "id": "hero", "type": "creator_story_hero" },
{ "id": "media", "type": "media_gallery" },
{ "id": "offer", "type": "offer_stack" },
{ "id": "proof", "type": "community_proof" },
{ "id": "optin", "type": "newsletter_optin" },
{ "id": "merch", "type": "merch_highlight" },
{ "id": "disclosure", "type": "sponsor_disclosure" }
],
"creator": {
"primaryEvent": "subscriber_signup",
"monetization": ["newsletter", "merch", "sponsor"]
},
"segmentation": {
"audiences": ["new_followers", "returning_fans", "high_engagement"]
},
"seo": { "title": "Creator Campaign Hub | Latest Drops" }
}
7. Governance and QA checklist
- Ensure slug uniqueness before first publish.
- Confirm campaign health and test conversion paths.
- Validate schema JSON parses and modules render in preview.
- Keep pre-release pages in
FREE_WITH_LOGINuntil approved. - Publish only after analytics and attribution tags are verified.
8. Common failure modes and fixes
slug_conflict:- Fix: choose a page slug not used by any link slug.
campaign_structure_not_configured:- Fix: run upsert first to bind
detailsPageSlug. schema_not_foundorschema_invalid_json:- Fix: re-upsert schema to create a fresh valid S3 version.
insufficient_scopeon PAT/MCP:- Fix: add
pages.readand/orpages.writescopes.