Files
claude-skills-reference/marketing-skill/analytics-tracking/references/debugging-playbook.md
Alireza Rezvani 52321c86bc feat: Marketing Division expansion — 7 → 42 skills (#266)
* feat: Skill Authoring Standard + Marketing Expansion plans

SKILL-AUTHORING-STANDARD.md — the DNA of every skill in this repo:
10 universal patterns codified from C-Suite innovations + Corey Haines' marketingskills patterns:

1. Context-First: check domain context, ask only for gaps
2. Practitioner Voice: expert persona, goal-oriented, not textbook
3. Multi-Mode Workflows: build from scratch / optimize existing / situation-specific
4. Related Skills Navigation: when to use, when NOT to, bidirectional
5. Reference Separation: SKILL.md lean (≤10KB), refs deep
6. Proactive Triggers: surface issues without being asked
7. Output Artifacts: request → specific deliverable mapping
8. Quality Loop: self-verify, confidence tagging
9. Communication Standard: bottom line first, structured output
10. Python Tools: stdlib-only, CLI-first, JSON output, sample data

Marketing expansion plans for 40-skill marketing division build.

* feat: marketing foundation — context + ops router + authoring standard

marketing-context/: Foundation skill every marketing skill reads first
  - SKILL.md: 3 modes (auto-draft, guided interview, update)
  - templates/marketing-context-template.md: 14 sections covering
    product, audience, personas, pain points, competitive landscape,
    differentiation, objections, switching dynamics, customer language
    (verbatim), brand voice, style guide, proof points, SEO context, goals
  - scripts/context_validator.py: Scores completeness 0-100, section-by-section

marketing-ops/: Central router for 40-skill marketing ecosystem
  - Full routing matrix: 7 pods + cross-domain routing to 6 skills in
    business-growth, product-team, engineering-team, c-level-advisor
  - Campaign orchestration sequences (launch, content, CRO sprint)
  - Quality gate matching C-Suite standard
  - scripts/campaign_tracker.py: Campaign status tracking with progress,
    overdue detection, pod coverage, blocker identification

SKILL-AUTHORING-STANDARD.md: Universal DNA for all skills
  - 10 patterns: context-first, practitioner voice, multi-mode workflows,
    related skills navigation, reference separation, proactive triggers,
    output artifacts, quality loop, communication standard, python tools
  - Quality checklist for skill completion verification
  - Domain context file mapping for all 5 domains

* feat: import 20 workspace marketing skills + standard sections

Imported 20 marketing skills from OpenClaw workspace into repo:

Content Pod (5):
  content-strategy, copywriting, copy-editing, social-content, marketing-ideas

SEO Pod (2):
  seo-audit (+ references enriched by subagent), programmatic-seo (+ refs)

CRO Pod (5):
  page-cro, form-cro, signup-flow-cro, onboarding-cro, popup-cro, paywall-upgrade-cro

Channels Pod (2):
  email-sequence, paid-ads

Growth + Intel + GTM (5):
  ab-test-setup, competitor-alternatives, marketing-psychology, launch-strategy, brand-guidelines

All 29 skills now have standard sections per SKILL-AUTHORING-STANDARD.md:
   Proactive Triggers (4-5 per skill)
   Output Artifacts table
   Communication standard reference
   Related Skills with WHEN/NOT disambiguation

Subagents enriched 8 skills with additional reference docs:
  seo-audit, programmatic-seo, page-cro, form-cro,
  onboarding-cro, popup-cro, paywall-upgrade-cro, email-sequence

43 files, 10,566 lines added.

* feat: build 13 new marketing skills + social-media-manager upgrade

All skills are 100% original work — inspired by industry best practices,
written from scratch in our own voice following SKILL-AUTHORING-STANDARD.md.

NEW Content Pod (2):
  content-production — full research→draft→optimize pipeline, content_scorer.py
  content-humanizer — AI pattern detection + voice injection, humanizer_scorer.py

NEW SEO Pod (3):
  ai-seo — AI search optimization (AEO/GEO/LLMO), entirely new category
  schema-markup — JSON-LD structured data, schema_validator.py
  site-architecture — URL structure + internal linking, sitemap_analyzer.py

NEW Channels Pod (2):
  cold-email — B2B outreach (distinct from email-sequence lifecycle)
  ad-creative — bulk ad generation + platform specs, ad_copy_validator.py

NEW Growth Pod (3):
  churn-prevention — cancel flows + save offers + dunning, churn_impact_calculator.py
  referral-program — referral + affiliate programs
  free-tool-strategy — engineering as marketing

NEW Intelligence Pod (1):
  analytics-tracking — GA4/GTM setup + event taxonomy, tracking_plan_generator.py

NEW Sales Pod (1):
  pricing-strategy — pricing, packaging, monetization

UPGRADED:
  social-media-analyzer → social-media-manager (strategy, calendar, community)

Totals: 42 skills, 27 Python scripts, 60 reference docs, 163 files, 43,265 lines

* feat: update index, marketplace, README for 42 marketing skills

- skills-index.json: 89 → 124 skills (42 marketing entries)
- marketplace.json: marketing-skills v2.0.0 (42 skills, 27 tools)
- README.md: badge 134 → 169, marketing row updated
- prompt-engineer-toolkit: added YAML frontmatter
- Removed build logs from repo
- Parity check: 42/42 passed (YAML + Related + Proactive + Output + Communication)

* fix: merge content-creator into content-production, split marketing-psychology

Quality audit fixes:

1. content-creator → DEPRECATED redirect
   - Scripts (brand_voice_analyzer.py, seo_optimizer.py) moved to content-production
   - SKILL.md replaced with redirect to content-production + content-strategy
   - Eliminates duplicate routing confusion

2. marketing-psychology → 24KB split to 6.8KB + reference
   - 70+ mental models moved to references/mental-models-catalog.md (397 lines)
   - SKILL.md now lean: categories overview, most-used models, quick reference
   - Saves ~4,300 tokens per invocation

* feat: add plugin configs, Codex/OpenClaw compatibility, ClawHub packaging

- marketing-skill/SKILL.md: ClawHub-compatible root with Quick Start for Claude Code, Codex CLI, OpenClaw
- marketing-skill/CLAUDE.md: Agent instructions (routing, context, anti-patterns)
- marketing-skill/.codex/instructions.md: Codex CLI skill routing
- .claude-plugin/marketplace.json: deduplicated, marketing-skills v2.0.0
- .codex/skills-index.json: content-creator marked deprecated, psychology updated
- Total: 42 skills, 27 Python tools, 60 references, 18 plugins

* feat: add 16 Python tools to knowledge-only skills

Enriched 12 previously tool-less skills with practical Python scripts:
- seo-audit/seo_checker.py — HTML on-page SEO analysis (0-100)
- copywriting/headline_scorer.py — headline quality scoring (0-100)
- copy-editing/readability_scorer.py — Flesch + passive + filler detection
- content-strategy/topic_cluster_mapper.py — keyword clustering
- page-cro/conversion_audit.py — HTML CRO signal analysis (0-100)
- paid-ads/roas_calculator.py — ROAS/CPA/CPL calculator
- email-sequence/sequence_analyzer.py — email sequence scoring (0-100)
- form-cro/form_field_analyzer.py — form field CRO audit (0-100)
- onboarding-cro/activation_funnel_analyzer.py — funnel drop-off analysis
- programmatic-seo/url_pattern_generator.py — URL pattern planning
- ab-test-setup/sample_size_calculator.py — statistical sample sizing
- signup-flow-cro/funnel_drop_analyzer.py — signup funnel analysis
- launch-strategy/launch_readiness_scorer.py — launch checklist scoring
- competitor-alternatives/comparison_matrix_builder.py — feature comparison
- social-media-manager/social_calendar_generator.py — content calendar
- readability_scorer.py — fixed demo mode for non-TTY execution

All 43/43 scripts pass execution. All stdlib-only, zero pip installs.
Total: 42 skills, 43 Python tools, 60+ reference docs.

* feat: add 3 more Python tools + improve 6 existing scripts

New tools from build agent:
- email-sequence/scripts/sequence_analyzer.py — email sequence scoring (91/100 demo)
- paid-ads/scripts/roas_calculator.py — ROAS/CPA/CPL/break-even calculator
- competitor-alternatives/scripts/comparison_matrix_builder.py — feature matrix

Improved scripts (better demo modes, fuller analysis):
- seo_checker.py, headline_scorer.py, readability_scorer.py,
  conversion_audit.py, topic_cluster_mapper.py, launch_readiness_scorer.py

Total: 42 skills, 47 Python tools, all passing.

* fix: remove duplicate scripts from deprecated content-creator

Scripts already live in content-production/scripts/. The content-creator
directory is now a pure redirect (SKILL.md only + legacy assets/refs).

* fix: scope VirusTotal scan to executable files only

Skip scanning .md, .py, .json, .yml — they're plain text files
that VirusTotal can't meaningfully analyze. This prevents 429 rate
limit errors on PRs with many text file changes (like 42 marketing skills).

Scan still covers: .js, .ts, .sh, .mjs, .cjs, .exe, .dll, .so, .bin, .wasm

---------

Co-authored-by: Leo <leo@openclaw.ai>
2026-03-06 03:56:16 +01:00

7.9 KiB

Tracking Debug Playbook

Step-by-step methodology for diagnosing and fixing analytics tracking issues.


The Debug Mindset

Analytics bugs are harder than code bugs because:

  1. They fail silently — no error thrown, just missing data
  2. They often only appear in production
  3. They can be caused by timing, consent, ad blockers, or just configuration

Work systematically. Don't guess. Verify at each layer before moving to the next.


The Debug Stack (Bottom-Up)

Layer 5: GA4 Reports / DebugView      ← what you see
Layer 4: GA4 Data Processing          ← where it lands
Layer 3: Network Request              ← what was sent
Layer 2: GTM / Tag firing             ← what GTM did
Layer 1: dataLayer / App code         ← what your app pushed

When something's missing at Layer 5, start at Layer 1 and verify each layer before going up.


Tool Setup

GTM Preview Mode

  1. GTM → Preview (top right)
  2. Enter your site URL → Connect
  3. A blue bar appears at the bottom of your site: "Google Tag Manager"
  4. GTM Preview panel opens in a separate tab
  5. Perform the action you're debugging
  6. Check: did the expected tag fire?

Reading GTM Preview:

  • Left panel: events as they occur (Page View, Click, Custom Event, etc.)
  • Middle panel: Tags fired / Tags NOT fired for selected event
  • Right panel: Variables values at the time of the event

GA4 DebugView

  1. GA4 → Admin → DebugView
  2. Enable debug mode via:
    • GTM: add debug_mode: true to your GA4 Event tag parameters
    • Extension: install "GA Debugger" Chrome extension
    • URL parameter: add ?_gl= or use GA4 debug parameter
  3. Perform actions on your site
  4. Watch events appear in real-time (10-15 second delay)

Chrome DevTools — Network Tab

  1. Open DevTools → Network
  2. Filter by: collect or google-analytics or analytics
  3. Perform the action
  4. Look for requests to https://www.google-analytics.com/g/collect
  5. Click the request → Payload tab → view parameters

Common Issues and Fixes

Issue: Event fires in GTM Preview but not in GA4

Possible causes:

  1. Consent mode blocking — user is in denied state

    • Check: In GTM Preview, look at Variables → Analytics Storage — is it denied?
    • Fix: Test with consent granted, or implement Advanced Consent Mode
  2. Filters blocking data — internal traffic filter is active

    • Check: GA4 → Admin → Data Filters — is "Internal Traffic" filter active?
    • Fix: Disable filter temporarily, test, then re-enable and exclude your IP correctly
  3. Debug mode not enabled — DebugView only shows debug-mode traffic

    • Check: Is debug_mode: true parameter on the GA4 Event tag?
    • Fix: Add it, or use the GA4 Debugger Chrome extension
  4. Wrong property — you're looking at a different GA4 property

    • Check: Confirm Measurement ID in GTM matches the GA4 property you're viewing
    • Fix: Compare G-XXXXXXXXXX in GTM vs. GA4 Data Stream settings
  5. Duplicate GA4 configuration tags — two config tags = double sessions + weird data

    • Check: GTM → Tags → filter by "GA4 Configuration" — more than one?
    • Fix: Delete duplicates, keep one with All Pages trigger

Issue: Event not firing in GTM Preview at all

Diagnosis path:

Step 1: Check the trigger

  • Is the trigger for this tag listed under the action in GTM Preview?
  • If not: the trigger didn't fire

Step 2: Check trigger conditions

  • Open the trigger in GTM
  • Reproduce the exact scenario step by step
  • In GTM Preview, check Variables at the moment the action happened
  • Do the variable values match your trigger conditions?

Step 3: dataLayer issue (for Custom Event triggers)

  • In GTM Preview → select the relevant event in left panel → Variables tab
  • Scroll to find event — what's the value?
  • If event name doesn't match trigger exactly: it won't fire (case-sensitive, exact match)

Step 4: Timing issue

  • If using "Page View" trigger and element doesn't exist yet: switch to "DOM Ready" or "Window Loaded"
  • If SPA: route changes may not trigger "Page View" — use History Change instead

Issue: Parameters showing as (not set) or undefined in GA4

Step 1: Verify parameter is in the network request

  • DevTools → Network → find GA4 collect request → Payload
  • Search for the parameter name (e.g., plan_name)
  • If not there: GTM variable isn't resolving correctly

Step 2: Check the GTM variable

  • GTM Preview → find the event → Variables tab
  • Find the variable for this parameter (e.g., DLV - plan_name)
  • What's its value? If undefined: the dataLayer push didn't include this key, or key name is wrong

Step 3: Check dataLayer push in your app code

  • DevTools → Console → type: dataLayer.filter(e => e.event === 'your_event_name')
  • Inspect the object — is the parameter key present and spelled correctly?

Step 4: Check GA4 custom dimension registration

  • Some parameters require a registered custom dimension in GA4 to appear in reports
  • GA4 → Admin → Custom Definitions → Custom Dimensions
  • If parameter isn't registered here: it'll exist in raw data but won't show in Explore reports

Issue: Duplicate events (event fires 2x per action)

Find the duplicates:

  • GTM Preview → find the action → how many tags with the same name fired?
  • DevTools → Network → filter by collect → count hits for the action

Common causes:

  1. Enhanced Measurement + manual GTM tag

    • e.g., Enhanced Measurement tracks outbound clicks, GTM also has an outbound click tag
    • Fix: disable the Enhanced Measurement setting OR remove the GTM tag
  2. Two GTM Configuration tags

    • Each sends its own hits
    • Fix: delete one, keep one
  3. SPA router fires pageview + History Change trigger also fires

    • Fix: disable Enhanced Measurement pageview, use only History Change tag
  4. Event fires on multiple triggers that both match

    • Fix: make triggers more specific — add exclusion conditions

Issue: Sessions/users look wrong (too high or too low)

Too many sessions:

  • Multiple GA4 Configuration tags
  • History Change trigger firing + Enhanced Measurement pageview on SPA
  • Client ID not persisting (cookie being blocked or cleared)

Too few sessions / users:

  • Consent blocking analytics for non-consenting users (expected under strict consent mode)
  • Bot filtering too aggressive
  • GA4 tags firing on wrong pages only

Sessions reset unexpectedly (user shows as new on every page):

  • Cross-domain tracking not configured
  • Cookie domain mismatch
  • GTM cookie settings incorrect

Issue: Conversions not matching between GA4 and Google Ads

Check 1: Attribution window mismatch

  • GA4 default: 30-day last click
  • Google Ads: check conversion action settings for window
  • These legitimately produce different numbers

Check 2: Conversion event names

  • In Google Ads → Tools → Conversions → imported from GA4
  • Does the linked event name exactly match the GA4 event?

Check 3: Import is linked

  • Google Ads → Tools → Linked Accounts → Google Analytics 4
  • Is the correct GA4 property linked and synced?
  • Sync can take 24-48 hours after changes

Check 4: Enhanced Conversions

  • If GA4 uses a user_id or email parameter, Enhanced Conversions can improve matching
  • Google Ads → Conversions → Enhanced Conversions for Web → Enable

Debug Checklist Template

Use this for any new tracking issue:

[ ] Confirmed exact event name and parameters expected
[ ] Verified app code is pushing to dataLayer (console: dataLayer)
[ ] GTM Preview: trigger fires at correct moment
[ ] GTM Preview: parameters resolve to correct values (not undefined)
[ ] Network: GA4 collect request appears with correct payload
[ ] GA4 DebugView: event appears within 30 seconds
[ ] GA4 DebugView: parameters present and correct
[ ] GA4 Reports: event appears (24-48h delay for standard reports)
[ ] Consent check: tested with analytics consent granted
[ ] Filter check: internal traffic filter not blocking test traffic