You launched a Notion template in 2024 and a video course in 2026 on the same site. Site-wide visits per sale looks fine while the course starves, because template traffic dilutes the ratio.
Part of digital product guides. See the traffic-to-sales guide.
Path prefixes as product boundaries
/templates/* vs /course/*, landing reports split automatically if first path segment is stored. Home page traffic stays shared; deep links attribute to product line.
Webhook product_id is ground truth
UTMs lie when people share links. Revenue row product_id from Gumroad/Lemon wins arguments. Filter visitors by sessions that viewed /course before sale when sample allows.
Separate launch pins
Course launch week pins do not include template Black Friday pin. Calendar labels: course-ph-2026, templates-bf-2025.
Cross-sell banners
Site-wide banner to course from template buyers inflates course traffic with warm audience, good for sales, bad for cold ratio benchmarks. Tag utm_content=template-banner.
Pricing page with two buttons
Two checkout URLs, two utm_content values (buy-template, buy-course). Single page, dual CTA, never one untagged button.
Email segmentation
Same domain, different lists, use utm_content=list-course vs list-template on otherwise identical campaigns.
SEO cannibalization
Two products competing for “Notion productivity” keywords blend organic landers. Accept blended SEO or split subdomains course.brand.com for clean acquisition metrics.
Worked split
28d: Template 3k visits, 30 sales, ratio 100. Course 800 visits, 8 sales, ratio 100, parallel efficiency, different scale. Invest marginal hour in course distribution, not template tweaks.
Stripe SaaS third product
If you also run SaaS on /app, exclude /app from digital product ratio entirely, different Stripe attribution.
Hub
/blog/topics/digital-product-analytics
One domain does not mean one metric. Split paths, split webhooks, split pins, then decide where growth actually lives.
Home page as shared lobby
/ traffic serves both products via nav links. Site-wide ratio hides which product home actually feeds. Use session paths: after landing on /, did the user view /course or /templates before sale? Path prefix reports in path funnels answer that without a second domain.
Gumroad vs Lemon per product
You might sell templates on Gumroad and course on Lemon after a migration. Revenue rows need provider + product_id. UTMs on template ads must not be read when reviewing course ratio. Maintain a product catalog table in your head: id, path prefix, checkout provider, primary utm_content for CTAs.
Black Friday vs course launch collision
Calendar collisions blend pins unless you label aggressively. templates-bf-2025 and course-ph-2026 should never share one “November pin.” Marketing pulse exists so you remember which offer was live when ratio moved.
Navigation and cannibalization
Dropdown “Products” with equal weight sends half-interested visitors to both lines. If course is the growth bet, hero CTA should point to /course with utm_content=home-hero-course, measure before redesigning template pages that already work.
SEO landing on wrong product
A blog post ranks for a keyword that fits templates while you push course. Organic ratio for course looks starving; template looks fat. Options: new post for course intent, or accept SEO split and judge paid channels separately. RPV by landing page mindset applies per product line.
Email list single domain, two offers
Same Beehiiv list, two products, segment or tag utm_content per CTA block. “P.S. course link” without tags attributes revenue to whatever campaign wrapper you used, usually wrong. One email, two tagged buttons: buy-template and buy-course.
Webhook reconciliation across SKUs
Sunday reconciliation: sum sales per product_id, sum visitors per path prefix, compute ratio per line. If sums do not match Gumroad dashboard, check timezone boundaries (UTC vs local) before blaming analytics.
Worked migration scenario
You moved course from Gumroad to Lemon mid-year. Pin course-lemon-migration-week separately; ratios before and after are not comparable without footnote. Keep old product_id mapping in webhook handler comments.
When to split domains
Subdomain course.brand.com costs DNS and branding complexity but buys clean acquisition metrics. Stay on one domain while learning; split when course revenue justifies separate SEO and ratio targets, often past $3k/month on the secondary line.
Cross-sell without lying to ratio
Template buyers see course banner, warm traffic. Cold ratio benchmarks should exclude sessions with utm_content=template-banner or path /templates in the same session before course sale. Otherwise course looks efficient when it is mostly upsell.
Dashboard rows to maintain
| Product | Path prefix | product_id | Primary campaign prefix |
|---|---|---|---|
| Templates | /templates | gum_xxx | tpl- |
| Course | /course | lemon_yyy | course- |
Update the table when SKUs change.
Related guides
Honest limit
Webhook knows SKU; it rarely knows which blog paragraph sold course vs template unless UTMs and paths align. Qualitative reader surveys still help on top of split ratios.
Analytics site_id or property split
If your stack supports multiple site_id values on one tracker, assign template vs course, optional advanced pattern. Path prefix splitting is usually enough until revenue exceeds comfort zone.
Footer link equality problem
Footer listing both products equally sends low-intent clicks to both. Footer is navigation, not growth, exclude footer-only sessions from cold ratio benchmarks if you can identify entry path / + immediate footer click pattern.
Partner bundles
Selling bundle SKU on Gumroad combining template + course blends product_id, avoid bundles in analytics learning phase or split revenue manually in spreadsheet until webhook exposes line items.
Trademark and brand search
One brand, two products, branded Google queries land on home. Use Search Console queries to see which product name rises; align hero CTA seasonally.
Sunset a product line
When retiring templates, keep path prefix in analytics history. Pin template-sunset-2026 so course ratio is not compared to template-inclusive baseline.
Support tickets by product
Tag Intercom or help desk by product line. Course tickets rising while template sales flat suggests course quality issue masquerading as marketing problem.
Pricing parity mistakes
Accidentally linking course checkout on template pricing page, webhook product_id catches error; ratio looks like template traffic bought course. QA monthly.
Affiliate links per product
Different affiliates per line need different default utm_content in affiliate dashboard. Document in affiliate onboarding PDF.
Roadmap communication
Public roadmap mentioning course delays should not tank template ratio, unless you redirected all traffic to waitlist. Pin comms weeks separately.
Worked annual plan
Q1 template PH, Q3 course launch, two pins, never one “year pin.” Annual review compares each pin to its own baseline.
Final sanity question
“If I killed course tomorrow, would template ratio improve?” If yes, course traffic was diluting denominator, split was necessary. If no, course was invisible on site, navigation problem.
Hub
Before the next launch, open your product catalog table and confirm every CTA on the site maps to one row, five minutes that prevent a week of blended-ratio confusion.
Webhook test purchases per SKU
Run one test buy per product_id after any pricing change, confirms revenue rows land in the correct product bucket before you spend on ads aimed at the wrong offer. That single habit prevents the most embarrassing blended-ratio postmortems.