Loading...
Loading...
Standardizes all click-related IDs and CSS classes across website for clean analytics tracking. Use when users want to "standardize analytics classes", "clean up tracking IDs", "prepare DOM for GTM", "fix analytics naming", or "make tracking consistent". Scans entire codebase (HTML/JSX/TSX/Vue) and applies consistent naming convention - IDs as "cta_{location}_{action}" and classes as "js-track js-{category} js-{action} js-{location}". Acts as senior frontend engineer ensuring scalable GA4/GTM implementation.
npx skill4agent add aimonk2025/google-tag-manager-automation gtm-dom-standardization{category}_{location}_{descriptor}id="cta_hero_get_started"
id="nav_header_pricing"
id="form_footer_newsletter"
id="video_hero_product_demo"
id="outbound_footer_twitter"js-track js-{category} js-{action} js-{location}js-trackclass="js-track js-cta js-click js-hero"
class="js-track js-nav js-click js-header"
class="js-track js-form js-submit js-footer"
class="js-track js-media js-play js-hero"<button><a><Link><form><video><audio><form><video><audio>Is it the primary CTA on the page?
├─ Yes → Category: cta
└─ No → Category: navWhere is it located?
├─ In navbar/footer → Category: nav
├─ Hero or prominent → Category: cta
└─ Content area → Category: cta (default)Is it a primary conversion action?
├─ Yes → Category: demo (primary: cta + demo)
└─ No → Category: demoIs it inside a <form> tag?
├─ Yes → Category: form, Action: submit
└─ No → Category: cta, Action: click<button class="btn primary">Get Started</button><button
className="btn primary js-track js-cta js-click js-hero"
id="cta_hero_get_started"
>
Get Started
</button><a href="/pricing">Pricing</a><a
href="/pricing"
className="js-track js-nav js-click js-header"
id="nav_header_pricing"
>
Pricing
</a><Link href="/pricing">Pricing</Link><Link
href="/pricing"
className="js-track js-nav js-click js-header"
id="nav_header_pricing"
>
Pricing
</Link><form onSubmit={handleSubmit}>
<input type="email" />
<button type="submit">Subscribe</button>
</form><form
onSubmit={handleSubmit}
className="js-track js-form js-submit js-footer"
id="form_footer_newsletter"
>
<input type="email" />
<button type="submit">Subscribe</button>
</form>// Use className (not class)
<button
className="btn primary js-track js-cta js-click js-hero"
id="cta_hero_get_started"
>
Get Started
</button><!-- Use :class for dynamic classes -->
<button
:class="['btn', 'primary', 'js-track', 'js-cta', 'js-click', 'js-hero']"
id="cta_hero_get_started"
>
Get Started
</button><button
class="btn primary js-track js-cta js-click js-hero"
id="cta_hero_get_started"
>
Get Started
</button>// ❌ Removed original classes
<button className="js-track js-cta js-click">
Get Started
</button>// ✅ Preserved original classes
<button className="btn btn-lg btn-primary rounded shadow js-track js-cta js-click js-hero">
Get Started
</button>=== DOM Standardization Complete ===
Updated 47 elements across 12 files
--- Element Breakdown ---
✓ 12 CTAs standardized
✓ 8 navigation links updated
✓ 3 forms with tracking classes
✓ 5 outbound links marked
✓ 2 media elements updated
✓ 17 existing elements renamed for consistency
--- Categories Used ---
cta (12), nav (8), form (3), outbound (5), media (2)
--- Files Modified ---
app/page.tsx (12 elements)
components/Navbar.tsx (8 elements)
components/Footer.tsx (7 elements)
components/Hero.tsx (6 elements)
components/PricingSection.tsx (4 elements)
... (7 more files)
--- Naming Decisions ---
Ambiguous cases resolved:
1. "Learn More" button (app/page.tsx:156)
→ Categorized as: CTA (primary action in section)
→ Applied: class="js-track js-cta js-click js-features"
2. "Contact Us" link (components/Navbar.tsx:45)
→ Categorized as: Navigation (in navbar)
→ Applied: class="js-track js-nav js-click js-header"
3. "Watch Demo" button (app/page.tsx:89)
→ Categorized as: Demo + CTA
→ Applied: class="js-track js-demo js-click js-hero"
--- Before vs After Examples ---
Before:
<button class="btn primary">Get Started</button>
After:
<button
className="btn primary js-track js-cta js-click js-hero"
id="cta_hero_get_started"
>
Get Started
</button>
--- Validation ---
✓ All original styling classes preserved
✓ No visual changes to site
✓ Consistent naming across all files
✓ Framework syntax correct (className for React)
--- Next Steps ---
✓ DOM is now analytics-ready
→ Next: Invoke gtm-strategy to plan what to track
→ Then: Invoke gtm-implementation to add dataLayer events
Ready to plan your tracking strategy? Invoke gtm-strategy skill.classNameclassclassNameclass:classclass// WRONG
<button className="js-track js-cta js-click">// RIGHT
<button className="btn btn-primary js-track js-cta js-click">// WRONG - mixed patterns
<button id="heroGetStarted" class="cta-button track-click">
<button id="footer_signup" class="js-cta">// RIGHT - same pattern
<button id="cta_hero_get_started" className="js-track js-cta js-click js-hero">
<button id="cta_footer_signup" className="js-track js-cta js-click js-footer">// WRONG
<button className="js-cta js-click">// RIGHT
<button className="js-track js-cta js-click">| Element | Category | Example Classes |
|---|---|---|
| "Get Started" button | cta | js-track js-cta js-click js-hero |
| "Pricing" nav link | nav | js-track js-nav js-click js-header |
| Newsletter form | form | js-track js-form js-submit js-footer |
| "Choose Pro" pricing CTA | pricing | js-track js-pricing js-click js-pricing |
| Login button | auth | js-track js-auth js-click js-header |
| "Watch Demo" button | demo | js-track js-demo js-click js-hero |
| Twitter link | outbound | js-track js-outbound js-click js-footer |
| Product video | media | js-track js-media js-play js-hero |
references/element-patterns.mdexamples/sample.mdctanavcta<Button><button>