Purpose
Marketing Sux Content Magic is a private WordPress plugin built for the Marketing Sux agency content workflow.
The plugin is not meant to generate content inside WordPress. Its purpose is to move approved, structured content from AI-assisted writing workflows into WordPress cleanly, safely, and repeatably.
The core workflow is:
- A human installs the plugin on a WordPress site.
- The human exports a site template JSON from the plugin.
- The human gives that template JSON to AI.
- AI reads the field structure, post types, taxonomies, options pages, and template slots.
- AI generates a matching Content Magic import JSON.
- The human uploads the import JSON into WordPress.
- The plugin validates/dry-runs the package.
- The human imports the package as draft content or patch updates.
- The human spot-checks and publishes manually.
This lets AI create content that fits the exact ACF structure of each client site without requiring manual CSV mapping, WP All Import setup, or copy/paste into WordPress fields.
Plugin Name and Versioning
Visible plugin name:
Marketing Sux Content Magic
Admin menu:
Tools → Content Magic
Current tested version during documentation:
0.2.6
Important naming rule:
The plugin name should not include the version number. Version numbers belong in the plugin header and internal constants only.
What the Plugin Does
Marketing Sux Content Magic supports:
- Exporting site template JSON
- Exporting content inventory JSON
- Exporting full content snapshots
- Exporting selected content
- Exporting options values
- Exporting taxonomies and terms
- Importing mapped JSON packages
- Creating new WordPress pages
- Updating existing WordPress pages
- Creating/updating posts
- Creating/updating custom post type entries
- Updating ACF fields
- Updating ACF Options Page fields
- Updating Rank Math SEO metadata
- Assigning taxonomy terms
- Creating taxonomy terms when needed
- Deleting taxonomy terms through cleanup packages
- Trashing, restoring, or deleting post objects by import action
The plugin is designed around patch-safe imports.
Core Safety Rule
The most important behavior:
Missing field = preserve existing content
Included field = update that field
Included blank field = intentionally clear that field
Example:
"acf": {
"hero_heading_h2": "New Hero Heading"
}
Only hero_heading_h2 updates. Other ACF fields stay untouched.
Example intentional clear:
"acf": {
"hero_value_prop_3": ""
}
This clears only hero_value_prop_3.
AI must not include blank fields unless the human intends to clear those fields.
What AI Should Ask For
When creating an import JSON, AI should ask for or use:
- The latest Site Template JSON from the target WordPress site.
- The desired content type:
- new landing page
- existing page update
- CPT entry
- options page/global content update
- cleanup package
- Target details:
- post type
- slug
- parent slug if needed
- import key if available
- page/CPT title
- publish status, usually
draft
- Content inputs:
- sitemap
- focus keywords
- client facts
- brand voice
- Surfer/SEO terms
- existing content snapshot if rewriting
- Whether the import should create new content, update existing content, or both.
The AI should not guess field names. It should use the uploaded site template.
Site Template JSON
The Site Template JSON tells AI what the site accepts.
It includes:
- site info
- plugin detection
- post types
- taxonomies
- options pages
- ACF template slots
- ACF field groups
- field labels
- field names
- field keys
- field types
- field requirements
- field instructions
- recommended targets
Important package type:
"package_type": "mscm_site_template"
AI should treat this file as the source of truth for field names and target structures.
Template Slots
A template slot represents an importable content model.
Examples from the tested template site:
business-infoglobal-contentlanding-pageslocation-infoproject-infoteam-inforeviewbrandproduct
Each template slot corresponds to an ACF field group or content structure.
A template slot answers:
What field structure am I filling?
A target answers:
Where should this content go?
Every import item should include both.
Content Import JSON
Import package type:
"package_type": "mscm_content_import"
Typical top-level structure:
{
"package_type": "mscm_content_import",
"package_version": "0.2.6",
"package_name": "Example Import Package",
"default_import_mode": "upsert",
"field_update_mode": "patch",
"items": []
}
Recommended defaults
For new content:
"default_import_mode": "upsert",
"field_update_mode": "patch"
For existing-only updates:
"default_import_mode": "update_only",
"field_update_mode": "patch"
Import Modes
Common modes:
upsert
Update if existing. Create if missing.
Best for new landing pages or CPT entries.
update_only
Only update an existing target. Do not create if missing.
Best for patch updates, cleanup, or options pages.
create_only
Create only. Skip/error if it already exists.
Useful when duplicates would be dangerous.
Target Types
The plugin supports multiple target types.
Target Type: Post Object
Used for:
- pages
- posts
- CPT entries
Example:
{
"template_slot": "landing-pages",
"import_mode": "upsert",
"target": {
"target_type": "post_object",
"post_type": "page",
"match_by": "import_key",
"import_key": "service_page_roof_replacement",
"slug": "roof-replacement",
"create_if_missing": true,
"update_if_exists": true
},
"post": {
"post_title": "Roof Replacement",
"post_name": "roof-replacement",
"post_status": "draft"
},
"acf": {
"hero_heading_h2": "Roof Replacement Done Right"
}
}
Matching Existing Content
Preferred matching methods:
1. Match by import key
Best long-term method.
"match_by": "import_key",
"import_key": "demo_service_page_website_design"
The plugin stores this import key as post meta:
_mscm_import_key
This is durable even if the slug changes later.
2. Match by ID
Precise, but not portable across environments.
"match_by": "id",
"post_id": 610
Useful for updates on a known site.
3. Match by slug
Good for simple top-level pages.
"match_by": "slug",
"slug": "website-design"
4. Match by slug + parent
Useful for child pages.
"match_by": "slug_parent",
"slug": "seo-services",
"parent_slug": "marketing-services"
Parent/Child Page Imports
Parent pages can be created earlier in the same import package, and child pages can target them later in the same package.
The parent item should appear before the child item.
Example child target:
"target": {
"target_type": "post_object",
"post_type": "page",
"match_by": "import_key",
"import_key": "test_child_seo_services",
"slug": "seo-services",
"path": "marketing-services/seo-services",
"parent_slug": "marketing-services",
"require_parent": true,
"create_if_missing": true,
"update_if_exists": true
}
Important:
require_parent: true should be used when the child must not import without its parent.
Updating Slugs and Parents
The plugin treats target.slug as a lookup value by default.
It does not force-update the existing post slug unless explicitly told.
To update a slug:
"target": {
"update_slug": true
}
To update a parent:
"target": {
"update_parent": true
}
This prevents accidental URL changes during ACF-only patch updates.
Target Type: ACF Options
Used for:
- Business Info
- Global Content
- site-wide reusable content
- options page fields
Example:
{
"template_slot": "business-info",
"import_mode": "update_only",
"target": {
"target_type": "acf_options",
"options_post_id": "options",
"options_page_slug": "business-info"
},
"acf": {
"business_name": "Example Company",
"primary_phone_number_display": "(555) 555-5555"
}
}
Important:
The tested template used:
"options_post_id": "options"
Some ACF setups may use option instead. AI should read the Site Template JSON and follow the exported value.
Target Type: Taxonomy Term
Used for deleting taxonomy terms or future term-specific operations.
Example delete:
{
"template_slot": "taxonomy-cleanup",
"import_mode": "update_only",
"action": "delete",
"target": {
"target_type": "taxonomy_term",
"taxonomy": "sales-category",
"slug": "demo-products"
}
}
Post Object Lifecycle Actions
Supported actions include:
Trash
"action": "trash"
Moves the target post/page/CPT to Trash.
Delete
"action": "delete"
Hard delete. Use carefully.
Restore
"action": "restore"
Restores a trashed item.
Example:
{
"template_slot": "landing-pages",
"import_mode": "update_only",
"action": "trash",
"target": {
"target_type": "post_object",
"post_type": "page",
"match_by": "import_key",
"import_key": "test_page_google_ads_management",
"include_trash": true,
"create_if_missing": false,
"update_if_exists": true
}
}
Taxonomies
The plugin can assign and create terms.
Example:
"taxonomies": {
"sales-category": {
"append": false,
"terms": [
{
"name": "Website Services",
"slug": "website-services",
"create_if_missing": true
}
]
}
}
Rules:
append: falsereplaces the target object’s terms for that taxonomy.append: trueadds terms without removing existing ones.- Omitted taxonomies are preserved.
- Included taxonomy with an empty term array may clear that taxonomy assignment depending on plugin behavior.
AI should only include taxonomies intentionally.
SEO Fields
The plugin supports Rank Math metadata.
Example:
"seo": {
"focus_keyword": "website design",
"seo_title": "Website Design Services | Marketing Sux",
"seo_description": "Get a conversion-focused website built around clear messaging, clean structure, and practical SEO foundations.",
"robots": ["noindex"]
}
In previous tests, the plugin successfully set:
- Rank Math focus keyword
- Rank Math SEO title
- Rank Math meta description
- Rank Math robots/noindex
AI should include SEO fields when creating SEO-focused pages.
ACF Fields
ACF values go under the acf object.
Example:
"acf": {
"hero_pre_heading_h1": "Website Design",
"hero_heading_h2": "Websites Built To Generate Better Leads",
"hero_content": "<p>Approved rich text content here.</p>",
"body_3": "<h2>Longform Section</h2><p>Longform content here.</p>"
}
The plugin maps by field name/key using the exported site template.
AI should use the exact field names from the Site Template JSON.
WYSIWYG Fields
For WYSIWYG fields, AI should provide HTML strings:
"body_1_content": "<p>Paragraph text.</p><ul><li>Bullet item</li></ul>"
This is intentional. The website viewer sees rich text, and WordPress stores it correctly.
Textarea Fields
For textarea fields, AI should usually provide plain text unless the field instructions suggest otherwise.
Image Fields
Current best practice:
- Omit image fields unless intentionally updating/clearing them.
- Blank image fields only if the human wants to clear them.
- Image sideloading is not the priority workflow yet.
Important AI Rule: Do Not Include Empty Fields Casually
Because blank fields clear content, AI should avoid generating every field with empty strings.
Bad for patch updates:
"acf": {
"hero_heading_h2": "New Heading",
"body_3": ""
}
This would clear body_3.
Good:
"acf": {
"hero_heading_h2": "New Heading"
}
Only update what the human asked to update.
Export Types
The plugin has multiple export types.
Site Template JSON
Use this when AI needs to understand the site structure and field mapping.
Taxonomies + Terms JSON
Use this when AI needs existing taxonomy terms.
Content Inventory JSON
Use this when AI needs a lightweight list of existing posts/pages/CPTs.
Full Content Snapshot JSON
Use this when AI needs current content values, ACF values, SEO fields, post content, excerpts, taxonomies, and metadata.
Selected Content JSON
Use this when AI only needs specific pages, posts, CPTs, or options fields.
Options Values JSON
Use this when AI needs current Business Info / Global Content / options page values.
Clean Snapshot vs Developer Snapshot
Future improvement idea:
The current full snapshot can be noisy because it includes internal meta fields from Elementor, Rank Math, Brevo/SIB, ACF references, etc.
A future version should offer:
Clean Snapshot
Includes only:
- title
- slug
- post type
- status
- parent
- menu order
- taxonomies
- SEO fields
- ACF values
- post content/excerpt
Developer Snapshot
Includes all meta/debug data.
Tested Workflow Summary
The following behaviors were tested successfully:
- Site template export
- Full content snapshot export
- Single service page import
- ACF field mapping on landing page
- Rank Math metadata import
- Taxonomy term creation and assignment
- Small ACF-only update
- ACF-only update without calling
wp_insert_post() - Missing field preservation
- Intentional blank field clear
- Batch page creation
- Parent page and child page creation in the same import
- Review CPT import
- Mixed CPT import
- Location CPT ACF fields
- Team Member CPT ACF fields
- Options page updates for Business Info
- Options page updates for Global Content
- Cleanup file to trash dummy pages/CPTs
- Taxonomy term deletion
- Lifecycle actions: trash/delete/restore support added
- Template export detects new ACF fields after field group changes
A funny field-change test confirmed that the template export correctly detected a newly added ACF field named fuck_you in the Landing Pages field group. This proved that future exports reflect current ACF field changes.
Standard Human + AI Workflow
New page build
Human provides:
- Site Template JSON
- page list
- slugs
- parent slugs if needed
- focus keywords
- client facts
- content notes
AI returns:
- Content Magic import JSON
Human does:
- Upload JSON.
- Run Validate / Dry Run.
- Review preview.
- Import as draft.
- Spot-check frontend/template rendering.
- Publish manually.
Existing page rewrite workflow
Human provides:
- Site Template JSON
- Selected Content JSON or Full Content Snapshot JSON
- instructions on what to rewrite
AI returns:
- Patch-style import JSON containing only fields that should change.
Human validates and imports.
AI must preserve fields unless explicitly changing them.
Global content workflow
Human provides:
- Site Template JSON
- Options Values JSON if preserving or rewriting existing global content
- instructions for Business Info or Global Content updates
AI returns:
acf_optionsimport JSON
Important:
Globals should not be included in normal page imports unless intentionally updating global/options data.
Cleanup workflow
Human asks for cleanup JSON.
AI creates a package using:
action: trashfor dummy pages/posts/CPTsaction: deletefor dummy taxonomy terms- blank ACF values only for dummy options fields that should be cleared
AI should avoid hard deleting posts unless the human explicitly asks.
Example: New Landing Page Import Item
{
"template_slot": "landing-pages",
"import_mode": "upsert",
"target": {
"target_type": "post_object",
"post_type": "page",
"match_by": "import_key",
"import_key": "service_page_website_design",
"slug": "website-design",
"path": "website-design",
"create_if_missing": true,
"update_if_exists": true
},
"post": {
"post_title": "Website Design",
"post_name": "website-design",
"post_status": "draft",
"post_excerpt": "Website design services built for clearer messaging, stronger conversion paths, and better lead generation.",
"menu_order": 120
},
"seo": {
"focus_keyword": "website design",
"seo_title": "Website Design Services | Marketing Sux",
"seo_description": "Get a conversion-focused website built around clear messaging, clean structure, and practical SEO foundations."
},
"taxonomies": {
"sales-category": {
"append": false,
"terms": [
{
"name": "Website Services",
"slug": "website-services",
"create_if_missing": true
}
]
}
},
"acf": {
"wordpress_title": "Website Design",
"wordpress_slug": "website-design",
"wordpress_excerpt": "Website design services built for clearer messaging, stronger conversion paths, and better lead generation.",
"seo_focus_keyword": "website design",
"seo_meta_title": "Website Design Services | Marketing Sux",
"seo_meta_description": "Get a conversion-focused website built around clear messaging, clean structure, and practical SEO foundations.",
"hero_pre_heading_h1": "Website Design",
"hero_heading_h2": "Websites Built To Generate Better Leads",
"hero_content": "<p>A good website should do more than look decent. It should explain what you do, make the next step obvious, and support the search strategy behind the business.</p>",
"hero_value_prop_1": "Clear Page Structure",
"hero_value_prop_2": "Conversion-Focused Copy",
"hero_value_prop_3": "SEO-Ready Builds",
"body_1_heading_h2": "Website Design That Starts With The Business Goal",
"body_1_content": "<p>We design websites around the way real customers make decisions.</p>",
"body_2_heading_h2": "Built For SEO, Speed, And Easy Updates",
"body_2_content": "<p>Your site should be easy to manage after launch.</p>",
"body_3": "<h2>A Website Design Process That Does Not Start With Pretty Pictures</h2><p>Most bad website projects start in the wrong place.</p>",
"faqs_heading": "Website Design FAQs",
"faqs_intro": "A few common questions about building a better business website.",
"faq_1_question": "What makes a website design good for lead generation?",
"faq_1_answer": "A lead-focused website has clear messaging, strong calls to action, service-specific pages, simple navigation, and forms or phone actions that are easy to find.",
"faq_2_question": "Do you build websites with SEO in mind?",
"faq_2_answer": "Yes. Page structure, headings, metadata, internal linking, service pages, and location targeting should be planned before the site is designed.",
"faq_3_question": "Can this type of site be updated after launch?",
"faq_3_answer": "Yes. Structured ACF fields and reusable templates make it easier to update content, add pages, and keep layouts consistent over time.",
"faq_4_question": "Is this imported as a draft?",
"faq_4_answer": "Yes. Content Magic imports new page packages as drafts unless instructed otherwise.",
"cta_heading": "Build A Website That Has A Job To Do",
"cta_button_text": "Start Your Website Project",
"cta_content": "<p>Ready for a site that looks better, reads clearer, and supports your lead-generation strategy?</p>"
}
}
Example: Small Patch Update
{
"package_type": "mscm_content_import",
"package_version": "0.2.6",
"package_name": "Small Patch Update",
"default_import_mode": "update_only",
"field_update_mode": "patch",
"items": [
{
"template_slot": "landing-pages",
"import_mode": "update_only",
"target": {
"target_type": "post_object",
"post_type": "page",
"match_by": "import_key",
"import_key": "service_page_website_design",
"create_if_missing": false,
"update_if_exists": true
},
"acf": {
"hero_heading_h2": "New Heading Only"
}
}
]
}
Example: Intentional Clear
{
"acf": {
"hero_value_prop_3": ""
}
}
Only use this when the human wants to clear that field.
Example: Options Page Update
{
"template_slot": "global-content",
"import_mode": "update_only",
"target": {
"target_type": "acf_options",
"options_post_id": "options",
"options_page_slug": "global-content"
},
"acf": {
"cta_heading": "Ready To Get Started?",
"cta_button_text": "Contact Us",
"cta_content": "<p>Contact the team to schedule your next step.</p>"
}
}
Example: Cleanup Item
{
"template_slot": "landing-pages",
"import_mode": "update_only",
"action": "trash",
"target": {
"target_type": "post_object",
"post_type": "page",
"match_by": "import_key",
"import_key": "test_page_google_ads_management",
"include_trash": true,
"create_if_missing": false,
"update_if_exists": true
}
}
AI Operating Instructions
When an AI assistant is asked to use Marketing Sux Content Magic:
- Ask for the latest Site Template JSON unless already provided.
- If updating existing content, ask for a Selected Content JSON or Full Content Snapshot JSON.
- Read the exact
template_slots, post types, taxonomies, and options pages. - Use exact ACF field names from the template.
- Do not invent fields.
- Do not include empty fields unless intentionally clearing them.
- Use
draftstatus for new pages unless the human says otherwise. - Prefer
match_by: import_keyfor durable updates. - Use unique import keys.
- Use
update_onlyfor patch updates. - Use
upsertfor new page/CPT creation. - Include parent slugs only when needed.
- Use
require_parent: truewhen a child page must not be created at the top level. - Keep global/options fields out of page imports unless the human intentionally wants to update global content.
- Run cleanup with
action: trash, not hard delete, unless explicitly asked. - Tell the human to run Validate / Dry Run before importing.
- Tell the human what the import is expected to create/update/clear/delete.
- If the import touches options/global fields, clearly warn what fields are included, because blanks will clear values.
Human Operating Instructions
For the human using the plugin:
- Install and activate Marketing Sux Content Magic on a staging or dev site first.
- Go to Tools → Content Magic.
- Export the Site Template JSON.
- Give the JSON to AI.
- Ask AI for a Content Magic import package.
- Upload/paste the import package into Content Magic.
- Run Validate / Dry Run.
- Review every row:
- template slot
- target type
- target
- action
- status
- message
- Import only after the dry run looks right.
- Spot-check the WordPress admin and frontend.
- Export a Full Snapshot or Selected Content JSON if verification is needed.
- Publish manually after review.
Staging vs Production
Use staging first for:
- new client field groups
- legacy field sets
- new CPTs
- WooCommerce testing
- image field testing
- relationship field testing
- cleanup/delete actions
Production imports should be limited to already-tested packages and should still be dry-run first.
Known Limitations / Future Improvements
Potential future improvements:
- WooCommerce-specific product support
- Simple WooCommerce product import
- Variable product import
- Product attributes/variations
- Featured image sideloading
- ACF image field sideloading
- Gallery field imports
- Relationship field resolution by import key/slug
- Cleaner snapshot vs developer snapshot modes
- Better template fingerprinting
- Direct API push from AI/chat to WordPress
- Import package archive/history in WordPress
- Rollback support
- More visual preview UI
- Field-level diff preview
- Import validation against required fields
- Site-specific template slot aliases
WooCommerce Notes
The tested template site had a product CPT, but it did not appear to be a normal WooCommerce product setup because WooCommerce taxonomies like product_cat, product_tag, and product_type were not present.
WooCommerce should be tested separately on a Woo-enabled staging site.
Recommended WooCommerce test order:
- Simple products
- SKU/price/stock/status
- Product categories/tags
- Attributes
- Featured image and gallery
- Variable products
- Variations
Final Summary
Marketing Sux Content Magic is a structured content deployment layer for AI-assisted agency workflows.
It lets humans and AI collaborate like this:
WordPress exports structure → AI writes mapped content → WordPress imports safely.
The plugin is especially useful for:
- ACF-heavy websites
- Elementor dynamic templates
- landing pages
- local SEO page builds
- service pages
- city pages
- CPT entries
- global content/options fields
- business info fields
- patch-style updates
- legacy ACF field sets
The plugin is not trying to replace strategy, writing review, SEO judgment, or human QA.
Its job is to make the final approved content easy to deploy without CSV mapping, manual copy/paste, or brittle import-plugin workflows.
Field Intent Mapping / Closest Functional Match
The Site Template JSON is the source of truth for exact field names, keys, and active site structure. However, agency writing instructions, formatting guides, and reusable ACF specs may not always use the exact same field names as a specific client site.
When the writing guide and live site template differ, AI should map by field intent, not by name alone.
Use this priority order:
- Exact field name match
Example:body_1_content→body_1_content - Exact field label match
Example: “Body 1 Content” → field label “Body 1 Content” - Same tab/section + same field role
Example: a field under “Hero” labeled “Main Heading” may serve the same role ashero_heading_h2 - Same content type + formatting behavior
Example: a WYSIWYG field intended for longform body copy may map to the Body 3 role even if namedmain_content,longform_content, orservice_body - Same frontend/template purpose
Example: a field used as the on-page H1 should receive the H1/focus keyword style instruction, even if its field name isbanner_title,main_heading, orhero_title - Ask before guessing when confidence is low
If two fields could reasonably serve the same purpose, AI should stop and ask the human which field to use.
Field Intent Beats Field Name
If an older site has a legacy field like:
"banner_title": {
"label": "Banner Title",
"type": "text"
}
…and the writing guide refers to:
"hero_pre_heading_h1"
AI should not assume they are different just because the names do not match. It should check:
- field label
- tab/section
- instructions
- field type
- frontend purpose
- nearby companion fields
- existing content snapshot values
If banner_title is the page’s visible H1, then apply the Hero Pre-Heading/H1 writing rule to banner_title.
Formatting Rules Follow the Field’s Functional Role
Formatting instructions should be transferred by role.
Examples:
- A field acting as Body 1 Content should get one paragraph plus optional bullets only. Do not add H2/H3 headings.
- A field acting as Body 2 Content should get one paragraph plus optional bullets only. Do not add H2/H3 headings.
- A field acting as Body 3 / Longform Content can include multiple H2/H3 blocks, paragraphs, bullets, and internal links.
- A field acting as FAQ Answer should be plain text only, even if the field technically allows HTML.
- A field acting as a textarea card description should usually be plain text / line breaks only.
- Image fields should be omitted unless intentionally updating or clearing images.
Mapping Confidence Labels
When mapping a reusable writing guide to a live site template, AI should classify each mapped field:
- Exact Match — same field name or obvious same label
- Strong Match — different name, same label/section/type/use
- Probable Match — similar role, but legacy naming or unclear frontend use
- Needs Human Confirmation — multiple possible targets or unclear purpose
For high-volume imports, AI should show a short mapping summary before generating the final import JSON when legacy fields are involved.
Example Mapping
Reusable writing guide says:
"hero_pre_heading_h1": "Main on-page H1"
Legacy site template has:
"banner_title": "Banner Title"
If the field is in the Hero/Banner section and appears to control the visible H1, map:
"banner_title": "Roof Replacement"
Do not invent hero_pre_heading_h1 if that field does not exist on the live site.
Marketing Sux ACF Master Spec
Reusable agency field set and CPT specification generated from the uploaded template reference and current ACF export. This version removes default values, expands Global Content to eight services, adds service URLs/images, improves field instructions, and cleans naming conventions.
Field Specification
| Object Type | Field Group | Tab Section | Field Label | Field Name | Field Type | Admin Width | Writing / Prep Specs | Allowed HTML / Formatting | Backend Instructions |
|---|---|---|---|---|---|---|---|---|---|
| Field Group | Business Info | Branding | Logo for Light Background | logo_for_light_background | image | 50 | Image upload field. | Upload the approved full logo for white or light backgrounds. SVG or transparent PNG preferred. | |
| Field Group | Business Info | Branding | Logo for Dark Background | logo_for_dark_background | image | 50 | Image upload field. | Upload the approved full logo for dark backgrounds. SVG or transparent PNG preferred. | |
| Field Group | Business Info | Branding | Icon for Light Background | icon_for_light_background | image | 50 | Image upload field. | Upload the approved icon/mark for light backgrounds. This is not the favicon. | |
| Field Group | Business Info | Branding | Icon for Dark Background | icon_for_dark_background | image | 50 | Image upload field. | Upload the approved icon/mark for dark backgrounds. This is not the favicon. | |
| Field Group | Business Info | Business | Business Name | business_name | text | 50 | None | Enter the public-facing brand name exactly as it should appear on the website. | |
| Field Group | Business Info | Business | Business Legal Name | business_legal_name | text | 50 | None | Optional. Enter the legal or registered business name if needed for policies, contracts, schema, or compliance. | |
| Field Group | Business Info | Contact | Primary Phone Number Display | primary_phone_number_display | text | 50 | None | Enter the main phone number exactly as visitors should see it, for example (555) 555-5555. | |
| Field Group | Business Info | Contact | Primary Phone Number Link | primary_phone_number_link | text | 50 | None | Enter the clickable tel: version, for example tel:+15555555555. | |
| Field Group | Business Info | Contact | NAP Phone Number | nap_phone_number | text | 50 | None | Enter the exact NAP/citation phone format if it differs from the primary display number. | |
| Field Group | Business Info | Contact | NAP Phone Number Link | nap_phone_number_link | text | 50 | None | Enter the clickable tel: version for the NAP phone number, for example tel:+15555555555. | |
| Field Group | Business Info | Contact | Business Email | business_email | text | 50 | None | Enter the main public inbox for leads, questions, or general inquiries. | |
| Field Group | Business Info | Contact | Book Meeting Link | book_meeting_link | text | 50 | None | Optional. Paste the full scheduling link, such as Calendly, Google Calendar appointment scheduling, or another booking URL. | |
| Field Group | Business Info | Primary Location | Primary Location Name | primary_location_name | text | 50 | None | Optional. Use a short public label such as Main Office, Showroom, or Headquarters. | |
| Field Group | Business Info | Primary Location | Google Maps Search Term | google_maps_search_term | text | 50 | None | Use a short map query such as Business Name + City + ST, or paste the full address. This replaces the older mismatched primary_location_address_link field name. | |
| Field Group | Business Info | Primary Location | Primary Location Address | primary_location_address | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter the full street address as shown on the website and Google Business Profile. Use line breaks only as needed. | |
| Field Group | Business Info | Primary Location | Business Hours | business_hours | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter standard business hours. Use one line per day or day range. | |
| Field Group | Business Info | Google Profiles | Google My Business Profile Share Link | google_my_business_profile_share_link | text | 50 | None | Paste the Share Profile link from Google Business Profile. | |
| Field Group | Business Info | Google Profiles | Google My Business Get Reviews Link | google_my_business_get_reviews_link | text | 50 | None | Paste the Google review request link from Get More Reviews / Share Review Form. | |
| Field Group | Business Info | Google Profiles | Google Maps Listing Link | google_maps_link | text | 50 | None | Paste the direct Google Maps listing URL or maps.app.goo.gl short link. | |
| Field Group | Business Info | Google Profiles | Google Maps Embed Map Code | google_maps_embed_map_code | text | 50 | None | Paste the Google Maps iframe/embed code if the template uses an embedded map. | |
| Field Group | Business Info | Social Profiles | Facebook Profile URL | social_facebook_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Business Info | Social Profiles | Instagram Profile URL | social_instagram_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Business Info | Social Profiles | X Profile URL | social_x_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Business Info | Social Profiles | LinkedIn Profile URL | social_linkedin_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Business Info | Social Profiles | YouTube Channel URL | social_youtube_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Business Info | Social Profiles | TikTok Profile URL | social_tiktok_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Business Info | Social Profiles | Pinterest Profile URL | social_pinterest_url | text | 50 | None | Enter the full public profile URL, including https://. Leave blank if this platform is not used. | |
| Field Group | Global Content | Call To Action | CTA Heading | cta_heading | text | 50 | None | Use a direct, action-oriented heading that works across the site. | |
| Field Group | Global Content | Call To Action | CTA Button Text | cta_button_text | text | 50 | None | Use a short button label such as Request an Estimate, Contact Us, or Get Started. | |
| Field Group | Global Content | Call To Action | CTA Content | cta_content | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Keep this short, broad, and reusable. Usually one short paragraph. | |
| Field Group | Global Content | Services | Services Heading | services_heading | text | 50 | None | Heading above the global services/cards section. | |
| Field Group | Global Content | Services | Services Intro | services_intro | text | 50 | None | One to two short sentences introducing the service mix. | |
| Field Group | Global Content | Services | Service 1 Heading | service_1_heading | text | 50 | None | Enter the public label for service card 1. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 1 URL | service_1_url | text | 50 | None | Paste the relative or full URL for service card 1. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 1 Content | service_1_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 1. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 1 Image | service_1_image | image | 50 | Image upload field. | Upload the image used for service card 1 if the template displays service images. | |
| Field Group | Global Content | Services | Service 2 Heading | service_2_heading | text | 50 | None | Enter the public label for service card 2. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 2 URL | service_2_url | text | 50 | None | Paste the relative or full URL for service card 2. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 2 Content | service_2_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 2. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 2 Image | service_2_image | image | 50 | Image upload field. | Upload the image used for service card 2 if the template displays service images. | |
| Field Group | Global Content | Services | Service 3 Heading | service_3_heading | text | 50 | None | Enter the public label for service card 3. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 3 URL | service_3_url | text | 50 | None | Paste the relative or full URL for service card 3. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 3 Content | service_3_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 3. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 3 Image | service_3_image | image | 50 | Image upload field. | Upload the image used for service card 3 if the template displays service images. | |
| Field Group | Global Content | Services | Service 4 Heading | service_4_heading | text | 50 | None | Enter the public label for service card 4. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 4 URL | service_4_url | text | 50 | None | Paste the relative or full URL for service card 4. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 4 Content | service_4_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 4. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 4 Image | service_4_image | image | 50 | Image upload field. | Upload the image used for service card 4 if the template displays service images. | |
| Field Group | Global Content | Services | Service 5 Heading | service_5_heading | text | 50 | None | Enter the public label for service card 5. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 5 URL | service_5_url | text | 50 | None | Paste the relative or full URL for service card 5. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 5 Content | service_5_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 5. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 5 Image | service_5_image | image | 50 | Image upload field. | Upload the image used for service card 5 if the template displays service images. | |
| Field Group | Global Content | Services | Service 6 Heading | service_6_heading | text | 50 | None | Enter the public label for service card 6. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 6 URL | service_6_url | text | 50 | None | Paste the relative or full URL for service card 6. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 6 Content | service_6_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 6. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 6 Image | service_6_image | image | 50 | Image upload field. | Upload the image used for service card 6 if the template displays service images. | |
| Field Group | Global Content | Services | Service 7 Heading | service_7_heading | text | 50 | None | Enter the public label for service card 7. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 7 URL | service_7_url | text | 50 | None | Paste the relative or full URL for service card 7. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 7 Content | service_7_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 7. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 7 Image | service_7_image | image | 50 | Image upload field. | Upload the image used for service card 7 if the template displays service images. | |
| Field Group | Global Content | Services | Service 8 Heading | service_8_heading | text | 50 | None | Enter the public label for service card 8. Keep it short and close to the site service naming. | |
| Field Group | Global Content | Services | Service 8 URL | service_8_url | text | 50 | None | Paste the relative or full URL for service card 8. Use relative paths like /roof-replacement/ when possible. | |
| Field Group | Global Content | Services | Service 8 Content | service_8_content | textarea | 50 | Plain text / line breaks only. | Write one short service-card description for service 8. Keep it scannable and conversion-focused. | |
| Field Group | Global Content | Services | Service 8 Image | service_8_image | image | 50 | Image upload field. | Upload the image used for service card 8 if the template displays service images. | |
| Field Group | Global Content | Brand Partners | Brand Partners Heading | brand_partners_heading | text | 50 | None | Heading above a brand/logo/manufacturer/vendor loop. | |
| Field Group | Global Content | Brand Partners | Brand Partners Intro | brand_partners_intro | text | 50 | None | One to two short sentences framing the brand or partner section. | |
| Field Group | Global Content | Reviews | Reviews Heading | reviews_heading | text | 50 | None | Heading above featured reviews, testimonials, or review loop. | |
| Field Group | Global Content | Reviews | Reviews Intro | reviews_intro | text | 50 | None | One to two short sentences framing customer proof. | |
| Field Group | Global Content | Warranties | Warranties Heading | warranties_heading | text | 50 | None | Short heading for the warranty support block. | |
| Field Group | Global Content | Warranties | Warranties URL | warranties_url | text | 50 | None | Paste the relative or full URL for the warranty page or warranty details, if used. | |
| Field Group | Global Content | Warranties | Warranties Body | warranties_body | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Write the reusable warranty summary. WYSIWYG is allowed for paragraph text, short lists, and inline links. | |
| Field Group | Global Content | Financing | Financing Heading | financing_heading | text | 50 | None | Short heading for the financing support block. | |
| Field Group | Global Content | Financing | Financing URL | financing_url | text | 50 | None | Paste the relative or full URL for the financing page or financing application, if used. | |
| Field Group | Global Content | Financing | Financing Body | financing_body | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Write the reusable financing/payment summary. WYSIWYG is allowed for paragraph text, short lists, and inline links. | |
| Field Group | Global Content | Process | Process Heading | process_heading | text | 50 | None | Heading above the four-step process section. | |
| Field Group | Global Content | Process | Process Intro | process_intro | text | 50 | None | One to two short sentences introducing the process. | |
| Field Group | Global Content | Process | Step 1 Heading | process_step_1_heading | text | 50 | None | Enter a short title for process step 1. | |
| Field Group | Global Content | Process | Step 1 Description | process_step_1_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining process step 1. | |
| Field Group | Global Content | Process | Step 2 Heading | process_step_2_heading | text | 50 | None | Enter a short title for process step 2. | |
| Field Group | Global Content | Process | Step 2 Description | process_step_2_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining process step 2. | |
| Field Group | Global Content | Process | Step 3 Heading | process_step_3_heading | text | 50 | None | Enter a short title for process step 3. | |
| Field Group | Global Content | Process | Step 3 Description | process_step_3_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining process step 3. | |
| Field Group | Global Content | Process | Step 4 Heading | process_step_4_heading | text | 50 | None | Enter a short title for process step 4. | |
| Field Group | Global Content | Process | Step 4 Description | process_step_4_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining process step 4. | |
| Field Group | Global Content | Service Area | Service Area Heading | service_area_heading | text | 50 | None | Heading above the service area section. | |
| Field Group | Global Content | Service Area | Service Area Intro | service_area_intro | text | 50 | None | One to two short sentences introducing the coverage area. | |
| Field Group | Global Content | Service Area | Service Area Territory 1 Title | service_area_territory_1_title | text | 50 | None | Enter the territory/region/county label for service area section 1. Leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 1 Body | service_area_territory_1_body | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter city lists and internal links for service area territory 1. Use bullets/links as needed; leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 2 Title | service_area_territory_2_title | text | 50 | None | Enter the territory/region/county label for service area section 2. Leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 2 Body | service_area_territory_2_body | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter city lists and internal links for service area territory 2. Use bullets/links as needed; leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 3 Title | service_area_territory_3_title | text | 50 | None | Enter the territory/region/county label for service area section 3. Leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 3 Body | service_area_territory_3_body | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter city lists and internal links for service area territory 3. Use bullets/links as needed; leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 4 Title | service_area_territory_4_title | text | 50 | None | Enter the territory/region/county label for service area section 4. Leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 4 Body | service_area_territory_4_body | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter city lists and internal links for service area territory 4. Use bullets/links as needed; leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 5 Title | service_area_territory_5_title | text | 50 | None | Enter the territory/region/county label for service area section 5. Leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 5 Body | service_area_territory_5_body | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter city lists and internal links for service area territory 5. Use bullets/links as needed; leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 6 Title | service_area_territory_6_title | text | 50 | None | Enter the territory/region/county label for service area section 6. Leave blank if unused. | |
| Field Group | Global Content | Service Area | Service Area Territory 6 Body | service_area_territory_6_body | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter city lists and internal links for service area territory 6. Use bullets/links as needed; leave blank if unused. | |
| Field Group | Global Content | Value Props | Value Props Heading | value_props_heading | text | 50 | None | Heading above the differentiators/value prop section. | |
| Field Group | Global Content | Value Props | Value Props Intro | value_props_intro | text | 50 | None | One to two short sentences introducing the differentiators. | |
| Field Group | Global Content | Value Props | Value Prop 1 Heading | value_prop_1_heading | text | 50 | None | Enter a short, punchy value prop title for item 1. | |
| Field Group | Global Content | Value Props | Value Prop 1 Description | value_prop_1_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining value prop 1. | |
| Field Group | Global Content | Value Props | Value Prop 2 Heading | value_prop_2_heading | text | 50 | None | Enter a short, punchy value prop title for item 2. | |
| Field Group | Global Content | Value Props | Value Prop 2 Description | value_prop_2_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining value prop 2. | |
| Field Group | Global Content | Value Props | Value Prop 3 Heading | value_prop_3_heading | text | 50 | None | Enter a short, punchy value prop title for item 3. | |
| Field Group | Global Content | Value Props | Value Prop 3 Description | value_prop_3_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining value prop 3. | |
| Field Group | Global Content | Value Props | Value Prop 4 Heading | value_prop_4_heading | text | 50 | None | Enter a short, punchy value prop title for item 4. | |
| Field Group | Global Content | Value Props | Value Prop 4 Description | value_prop_4_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence explaining value prop 4. | |
| Field Group | Global Content | About Us | About Us Heading | about_us_heading | text | 50 | None | Heading above the about/company summary section. | |
| Field Group | Global Content | About Us | About Us URL | about_us_url | text | 50 | None | Paste the relative or full URL for the About page, if used. | |
| Field Group | Global Content | About Us | About Us Intro | about_us_intro | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Write the reusable short company/about summary. Usually one short paragraph; links are allowed if needed. | |
| Field Group | Global Content | About Us | About Us Image | about_us_image | image | 50 | Image upload field. | Upload the image used with the global about section if the template displays one. | |
| Field Group | Global Content | About Us | About Us Item 1 Heading | about_us_item_1_heading | text | 50 | None | Enter a short heading for about/company proof item 1. | |
| Field Group | Global Content | About Us | About Us Item 1 Description | about_us_item_1_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence for about/company proof item 1. | |
| Field Group | Global Content | About Us | About Us Item 2 Heading | about_us_item_2_heading | text | 50 | None | Enter a short heading for about/company proof item 2. | |
| Field Group | Global Content | About Us | About Us Item 2 Description | about_us_item_2_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence for about/company proof item 2. | |
| Field Group | Global Content | About Us | About Us Item 3 Heading | about_us_item_3_heading | text | 50 | None | Enter a short heading for about/company proof item 3. | |
| Field Group | Global Content | About Us | About Us Item 3 Description | about_us_item_3_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence for about/company proof item 3. | |
| Field Group | Global Content | About Us | About Us Item 4 Heading | about_us_item_4_heading | text | 50 | None | Enter a short heading for about/company proof item 4. | |
| Field Group | Global Content | About Us | About Us Item 4 Description | about_us_item_4_description | textarea | 50 | Plain text / line breaks only. | Write one concise sentence for about/company proof item 4. | |
| Field Group | Global Content | Recent Posts | Recent Posts Heading | recent_posts_heading | text | 50 | None | Heading above a recent posts/articles/resources block. | |
| Field Group | Global Content | Recent Posts | Recent Posts Intro | recent_posts_intro | text | 50 | None | One to two short sentences framing the recent posts preview. | |
| Field Group | Landing Pages | Page Data | WordPress Title | wordpress_title | text | 50 | None | Use the approved page title or closest focus-keyword version from the sitemap. | |
| Field Group | Landing Pages | Page Data | WordPress Slug | wordpress_slug | text | 50 | None | Use the approved final URL slug from the sitemap. Lowercase with hyphens. | |
| Field Group | Landing Pages | Page Data | WordPress Excerpt | wordpress_excerpt | text | 100 | None | Usually mirrors the SEO meta description unless the sitemap or import process calls for different copy. | |
| Field Group | Landing Pages | Page Data | SEO Focus Keyword | seo_focus_keyword | text | 50 | None | Enter the main keyword target for this page. Keep one clear primary target per page. | |
| Field Group | Landing Pages | Page Data | SEO Meta Title | seo_meta_title | text | 50 | None | Write a CTR-focused title tag with the keyword used naturally. | |
| Field Group | Landing Pages | Page Data | SEO Meta Description | seo_meta_description | text | 100 | None | Write a short, click-worthy meta description that matches page intent. | |
| Field Group | Landing Pages | Media | Hero Background Image | hero_background_image | image | 50 | Image upload field. | Upload the hero background/support image if the template uses one. | |
| Field Group | Landing Pages | Media | Body 1 Image | body_1_image | image | 50 | Image upload field. | Upload the supporting image for Body 1 if the template displays one. | |
| Field Group | Landing Pages | Media | Body 2 Image | body_2_image | image | 50 | Image upload field. | Upload the supporting image for Body 2 if the template displays one. | |
| Field Group | Landing Pages | Media | Body 3 Image | body_3_image | image | 50 | Image upload field. | Upload the supporting image for Body 3 if the template displays one. | |
| Field Group | Landing Pages | Hero | Hero Pre-Heading (H1) | hero_pre_heading_h1 | text | 50 | None | Main on-page H1. Keep it close to the primary query and approved focus keyword. | |
| Field Group | Landing Pages | Hero | Hero Heading (H2) | hero_heading_h2 | text | 50 | None | Large display/positioning copy below the H1. Use brand-first, benefit-oriented language. | |
| Field Group | Landing Pages | Hero | Hero Content | hero_content | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | One short paragraph explaining what the company does, how it helps, and why it matters. | |
| Field Group | Landing Pages | Hero | Hero Value Prop 1 | hero_value_prop_1 | text | 33 | None | Short concrete benefit, usually 2 to 6 words. | |
| Field Group | Landing Pages | Hero | Hero Value Prop 2 | hero_value_prop_2 | text | 33 | None | Short concrete benefit, usually 2 to 6 words. | |
| Field Group | Landing Pages | Hero | Hero Value Prop 3 | hero_value_prop_3 | text | 33 | None | Short concrete benefit, usually 2 to 6 words. | |
| Field Group | Landing Pages | Body 1 | Body 1 Heading (H2) | body_1_heading_h2 | text | 50 | None | Plain text H2 for the first main support section. | |
| Field Group | Landing Pages | Body 1 | Body 1 Content | body_1_content | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | One paragraph plus optional bullet list only. Do not add H2/H3 headings inside this field. | |
| Field Group | Landing Pages | Body 2 | Body 2 Heading (H2) | body_2_heading_h2 | text | 50 | None | Plain text H2 for the second main support section. | |
| Field Group | Landing Pages | Body 2 | Body 2 Content | body_2_content | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | One paragraph plus optional bullet list only. Do not add H2/H3 headings inside this field. | |
| Field Group | Landing Pages | Body 3 | Body 3 | body_3 | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Main longform content area. This is the only primary body field allowed to contain multiple H2/H3 blocks, paragraphs, bullets, and internal links. | |
| Field Group | Landing Pages | FAQs | FAQs Heading | faqs_heading | text | 50 | None | Short FAQ section heading. | |
| Field Group | Landing Pages | FAQs | FAQs Intro | faqs_intro | text | 50 | None | One to two short sentences introducing the questions. | |
| Field Group | Landing Pages | FAQs | FAQ 1 Question | faq_1_question | text | 50 | None | Enter FAQ question 1 only. Plain text, no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 1 Answer | faq_1_answer | text | 50 | None | Enter a direct answer for FAQ 1. Plain text only; no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 2 Question | faq_2_question | text | 50 | None | Enter FAQ question 2 only. Plain text, no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 2 Answer | faq_2_answer | text | 50 | None | Enter a direct answer for FAQ 2. Plain text only; no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 3 Question | faq_3_question | text | 50 | None | Enter FAQ question 3 only. Plain text, no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 3 Answer | faq_3_answer | text | 50 | None | Enter a direct answer for FAQ 3. Plain text only; no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 4 Question | faq_4_question | text | 50 | None | Enter FAQ question 4 only. Plain text, no HTML. | |
| Field Group | Landing Pages | FAQs | FAQ 4 Answer | faq_4_answer | text | 50 | None | Enter a direct answer for FAQ 4. Plain text only; no HTML. | |
| Field Group | Landing Pages | CTA | CTA Heading | cta_heading | text | 50 | None | Main heading for the closing CTA section. | |
| Field Group | Landing Pages | CTA | CTA Button Text | cta_button_text | text | 50 | None | Button label only. Use only if the live template includes a CTA button. | |
| Field Group | Landing Pages | CTA | CTA Content | cta_content | wysiwyg | 100 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Keep short and direct. Usually one short paragraph explaining the next step. | |
| Field Group | Location Info | Location Info | Location Phone Number | location_phone_number | text | 50 | None | Enter the exact location-specific display phone number if different from the sitewide phone. | |
| Field Group | Location Info | Location Info | Location Phone Number Link | location_phone_number_link | text | 50 | None | Enter the tel: version of the location phone number, for example tel:+15555555555. | |
| Field Group | Location Info | Location Info | Location Address | location_address | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter the full location address as shown on the website and Google Business Profile. Use line breaks only as needed. | |
| Field Group | Location Info | Location Info | Location Business Hours | location_business_hours | wysiwyg | 50 | WYSIWYG; use paragraphs, bullets, and links where allowed by instructions. | Enter the hours for this location only. Use one line per day or day range. | |
| Field Group | Location Info | Google Profiles | Google Maps Search Term | google_maps_search_term | text | 50 | None | Use a short query like Business Name + City + ST or the full address for this location. | |
| Field Group | Location Info | Google Profiles | Google My Business Profile Share Link | google_my_business_profile_share_link | text | 50 | None | Paste the Google Business Profile share link for this location. | |
| Field Group | Location Info | Google Profiles | Google My Business Get Reviews Link | google_my_business_get_reviews_link | text | 50 | None | Paste the Google review request link for this location. | |
| Field Group | Location Info | Google Profiles | Google Maps Directions Link | google_maps_directions_link | text | 50 | None | Paste the Google Maps directions/listing URL for this location. | |
| Field Group | Project Info | Project Info | Project Gallery | project_gallery | gallery | 100 | Gallery upload field. | Upload images used for sliders, galleries, lightboxes, and proof sections on project entries. | |
| Field Group | Team Info | Team Info | Position | team_position | text | 50 | None | Enter the team member’s public role or title. | |
| Field Group | Team Info | Team Info | Email Address | team_email_address | text | 50 | None | Enter the team member’s public email address if displayed or used for lead routing. | |
| Field Group | Team Info | Team Info | Phone Number Display | team_phone_number_display | text | 50 | None | Optional. Enter the public display format for this team member’s phone number. | |
| Field Group | Team Info | Team Info | Phone Number Link | team_phone_number_link | text | 50 | None | Optional. Enter the tel: version of this team member’s phone number. | |
| Field Group | Team Info | Team Info | Profile Button URL | team_profile_button_url | text | 50 | None | Optional. Paste a related profile, scheduling, contact, or bio URL for this team member. |
CPT & Taxonomy Specification
| Object Type | Label | Singular Label | Slug | Purpose / Notes | Supports / Object Types | Search Behavior | Archive Behavior | Taxonomies / Applies To | Field Group |
|---|---|---|---|---|---|---|---|---|---|
| CPT | Brands | Brand | brand | Brands entries for reusable website content and loops. | title, editor, thumbnail, custom-fields | searchable | no archive | offering-category | none |
| CPT | Locations | Location | location | Locations entries for reusable website content and loops. | title, editor, thumbnail, custom-fields | searchable | no archive | none | Location Info |
| CPT | Products | Product | product | Products entries for reusable website content and loops. | title, editor, thumbnail, custom-fields | searchable | no archive | offering-category | none |
| CPT | Projects | Project | project | Projects entries for reusable website content and loops. | title, editor, thumbnail, custom-fields | searchable | no archive | offering-category | Project Info |
| CPT | Reviews | Review | review | Reviews entries for reusable website content and loops. | title, editor, custom-fields | excluded from search | no archive | none | none |
| CPT | Team Members | Team Member | team-member | Team Members entries for reusable website content and loops. | title, editor, thumbnail, custom-fields | searchable | no archive | none | Team Info |
| Taxonomy | Content Types | Content Type | content-type | Menu creation, template assignment, and internal content grouping. | page, brand, location, product, project, team-member | admin organization | n/a | n/a | n/a |
| Taxonomy | Offering Categories | Offering Category | offering-category | Group services, materials, brands, products, and related entries by offering type. | page, brand, product, project | admin organization | n/a | n/a | n/a |