GA4 Scroll and Video Engagement Plan: shiftly.example
Property: standard. Enhanced measurement on the web stream: Scrolls on, Video engagement off. Registered event-scoped custom dimensions: 14. Page list: 32 pages with September views.
1. Questions mapped
| Question | What you asked | Answered by enhanced measurement? | What it can show | Gap |
|---|---|---|---|---|
| M1 | How far do people read our blog posts, half or all the way? | Partly | The scroll event fires once per page when 90% depth becomes visible, so 'all the way' is answerable as 'reached 90%' | 'Half' needs a custom event at 50% depth; not covered by enhanced measurement |
| M2 | Do visitors watch the product videos on feature pages, and how much of them? | Only after Video engagement is switched on, and only for YouTube embeds with JS API support | video_start, video_progress at 10, 25, 50 and 75%, video_complete | /features/payroll-export has JS API off, so it is not covered |
| M3 | Does anyone play the demo page video? | No | Nothing: /demo uses a self-hosted MP4, which the saved sources do not cover | Needs a custom event; tagging steps not confirmed in the sources |
| M4 | Which help pages get read to the end? | Yes, as 'reached 90%' | Scroll events per page; already collected because Scrolls is on | None for the 90% reading of 'end' |
2. Video coverage by page
| Page | Path | Views (September) | Video on page | Class |
|---|---|---|---|---|
| P1 | /pricing | 8,200 | none | no video |
| P2 | /features/scheduling | 3,100 | YouTube, JS API on | covered |
| P3 | /features/reports | 2,400 | YouTube, JS API on | covered |
| P4 | /features/payroll-export | 1,900 | YouTube, JS API off | not covered |
| P5 | /demo | 4,600 | self-hosted MP4 | not covered |
| P6 | /blog/shift-swap-guide | 2,700 | none | no video |
| P7 | /blog/overtime-rules-basics | 3,900 | none | no video |
| P8 | /blog/rota-template | 5,100 | none | no video |
| P9 | /blog/no-show-policy | 1,300 | YouTube, JS API on | covered |
| P10 | /blog/break-scheduling | 1,150 | none | no video |
| P11 | /blog/labor-cost-percent | 2,050 | none | no video |
| P12 | /blog/holiday-staffing | 980 | Vimeo | not covered |
| P13 | /customers/clinic-story | 760 | YouTube, JS API on | covered |
| P14 | /customers/cafe-story | 640 | Vimeo | not covered |
| P15 | /customers/retail-story | 590 | none | no video |
| P16 | /integrations | 1,700 | none | no video |
| P17 | /integrations/pos | 880 | YouTube, JS API off | not covered |
| P18 | /help/getting-started | 3,300 | YouTube, JS API on | covered |
| P19 | /help/mobile-app | 2,100 | YouTube, JS API on | covered |
| P20 | /help/time-clock | 1,600 | self-hosted MP4 | not covered |
| P21 | /help/permissions | 720 | none | no video |
| P22 | /webinars/q3-roadmap | 450 | YouTube, JS API on | covered |
| P23 | /webinars/scheduling-101 | 510 | Vimeo | not covered |
| P24 | /about | 400 | none | no video |
| P25 | /careers | 350 | none | no video |
| P26 | /security | 610 | none | no video |
| P27 | /compare/spreadsheets | 1,450 | YouTube, JS API on | covered |
| P28 | /templates/weekly-rota | 2,600 | none | no video |
| P29 | /templates/availability-form | 1,250 | none | no video |
| P30 | /signup | 5,400 | none | no video |
| P31 | /blog/tip-pooling-explained | 1,020 | none | no video |
| P32 | /blog/split-shifts | 870 | YouTube, JS API off | not covered |
Classes: covered = YouTube with JS API on; not covered = YouTube with JS API off, Vimeo or self-hosted; no video; unknown. No page was unknown in your list.
3. Coverage counts
Counted and summed by script. Share of listed views = class views / 64,580 total listed views.
| Class | Pages | Views | Share of listed views |
|---|---|---|---|
| covered | 8 | 14,860 | 23.0% |
| not covered | 8 | 11,980 | 18.6% |
| no video | 16 | 37,740 | 58.4% |
| unknown | 0 | 0 | 0.0% |
| Total | 32 | 64,580 | 100.0% |
Not covered, by player:
| Player | Pages | Views |
|---|---|---|
| YouTube, JS API off | P4, P17, P32 | 3,650 |
| self-hosted MP4 | P5, P20 | 6,200 |
| Vimeo | P12, P14, P23 | 2,130 |
These shares describe the views on the 32 pages you listed for one month, not the whole site.
4. Custom dimension quota
| Item | Count |
|---|---|
| Registered now | 14 |
| Proposed new: video_percent (event-scoped) | 1 |
| After registering | 15 |
| Standard property limit (event-scoped) | 50 |
- My own note: the saved enhanced measurement page lists video_percent among the parameters sent with video events, but names only Video provider, Video title, Video URL and Visible as the dimensions they fill. Whether you must register video_percent to report on it is not confirmed in the sources, so I list it as a proposal to check in Admin, not a requirement.
- GA4 Help says new custom dimensions can be used "After 24-48 hours" (https://support.google.com/analytics/answer/10075209), so expect a wait before reports show them.
- No new dimension is proposed for the 50% scroll event; its design depends on how you tag it, which the sources do not cover.
5. Proposed changes (held)
Each change needs the Editor role or above on the property. Path from the saved page: Admin, under Data collection and modification, Data streams, then your web stream and Enhanced measurement (https://support.google.com/analytics/answer/9216061).
| ID | Change | Answers | Status |
|---|---|---|---|
| C1 | Switch Video engagement on in enhanced measurement | M2 (P2, P3, P9, P13, P18, P19, P22, P27) | HELD |
| C2 | Turn JS API support on for the YouTube embeds on P4, P17 and P32, then recheck coverage | M2 for /features/payroll-export | HELD |
| C3 | Custom event at 50% scroll depth on blog posts (design only; tagging steps not confirmed in the sources) | M1 'half' | HELD |
| C4 | Custom play event for the self-hosted demo video on P5 and the self-hosted help video on P20 (design only; steps not confirmed in the sources) | M3 | HELD |
| C5 | Register video_percent as an event-scoped custom dimension, if Admin shows it is not already reportable | M2 'how much' | HELD |
Vimeo pages (P12, P14, P23) stay not covered under this plan; tracking them is not in the sources I have.
6. Questions for you
- Who changes the embed code on the YouTube pages with JS API off (C2), and does your site builder expose that setting?
- Do you run Google Tag Manager? C3 and C4 need a tagging method, and I have no saved source for its steps.
- For M1, is 'half' enough, or do you also want other depths? Each one is a separate custom event to design.
- Should the Vimeo pages be tracked? If yes, I need a source for how that player reports events before I plan it.
Needs your decision
- Approve switching Video engagement on (C1, HELD).
- Approve turning JS API support on for P4, P17 and P32 (C2, HELD).
- Approve the 50% scroll custom event design (C3, HELD).
- Approve the self-hosted video play event design (C4, HELD).
- Approve registering video_percent (C5, HELD).
