GA Article Analytics
Overview
Use this skill to produce a repeatable GA4 content report for ifuryst.github.io. Prefer read-only collection from Google Analytics via Open Browser Use, then combine it with local repository checks for tracking and translation coverage.
Core Workflow
Confirm local site tracking configuration:
- Check
_config.yml for google_analytics, enable_google_analytics, and site URL.
- Check
_includes/scripts/analytics.liquid and layouts that include it.
- If needed, serve
_site locally and verify exactly one gtag.js script and one gtag('config', ...) call on representative home, Chinese post, and English post pages.
Audit translation coverage:
- Run
ruby skills/ga-article-analytics/scripts/audit_translations.rb.
- Treat posts without
translation_key as outside the pairing system unless the user expects every recent post to be translated.
- Report missing English pages separately from "not configured for translation".
Collect GA4 tables with OBU:
- Read
references/ga4-obu-workflow.md for exact report URLs and extraction snippets.
- Capture at least:
- Pages and screens by page path.
- Landing page by landing page path.
- Traffic acquisition by session source / medium.
- Demographic details by country when source quality matters.
- Keep the date range explicit, usually the current GA default or the range requested by the user.
Parse and classify rows:
- Use
python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind pages < exported-text.txt> when working from copied GA table text.
- For in-browser extraction, use the JavaScript snippets in the reference and then classify article rows with the same path rules:
- Article path:
^/(en/)?blog/\d{4}/
- English article: path starts with
/en/blog/
- Chinese article: path starts with
/blog/
- Exclude index pages, tag/category archives, pagination, favicon, 404, and empty paths from article rankings.
Produce a decision-oriented report:
- Lead with the practical conclusion.
- Include the reporting window and exact GA scope.
- Separate "Views" from "Landing sessions"; views measure total reading, landing sessions measure acquisition.
- Treat Direct as potentially self-traffic or unattributed traffic if the user says so, but still state its share.
- Compare source quality by engagement rate and engagement time, not sessions alone.
- Compare Chinese vs English pages, and call out whether low English numbers mean no tracking, no generation, or simply low demand.
- Group articles by topic only as an analytical aid; label the grouping as inferred from URL/title.
Report Shape
Use a concise structure:
- Scope: date range, property, filters, whether Direct is excluded or downweighted.
- Tracking health: GA script and live page status.
- Translation coverage: paired counts, missing recent translations.
- Top articles: views, active users, average engagement time.
- Landing pages: sessions and average engagement time for acquisition.
- Sources: direct, referral, organic search, social, notable domains.
- Geography: countries with high volume and countries with high engagement.
- Content guidance: what to write more, what to keep as long tail, what not to over-invest in.
Local Commands
ruby skills/ga-article-analytics/scripts/audit_translations.rb
python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind pages ga-pages.txt
python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind landing ga-landing.txt
python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind source ga-sources.txt
If _site is stale, build the site before checking generated HTML. If local Jekyll cannot run because Bundler or gems are missing, inspect the existing _site output and say that generated output may be stale.
1---2name: ga-article-analytics3description: Analyze this Jekyll blog's Google Analytics article performance, GA4 tracking health, English translation coverage, traffic sources, country quality, landing pages, page views, and content-direction recommendations. Use when asked to inspect GA, report article visits, compare Chinese and English post performance, decide future writing topics, or schedule recurring site analytics analysis.4---56# GA Article Analytics78## Overview910Use this skill to produce a repeatable GA4 content report for `ifuryst.github.io`. Prefer read-only collection from Google Analytics via Open Browser Use, then combine it with local repository checks for tracking and translation coverage.1112## Core Workflow13141. Confirm local site tracking configuration:1516 - Check `_config.yml` for `google_analytics`, `enable_google_analytics`, and site URL.17 - Check `_includes/scripts/analytics.liquid` and layouts that include it.18 - If needed, serve `_site` locally and verify exactly one `gtag.js` script and one `gtag('config', ...)` call on representative home, Chinese post, and English post pages.19202. Audit translation coverage:2122 - Run `ruby skills/ga-article-analytics/scripts/audit_translations.rb`.23 - Treat posts without `translation_key` as outside the pairing system unless the user expects every recent post to be translated.24 - Report missing English pages separately from "not configured for translation".25263. Collect GA4 tables with OBU:2728 - Read `references/ga4-obu-workflow.md` for exact report URLs and extraction snippets.29 - Capture at least:30 - Pages and screens by page path.31 - Landing page by landing page path.32 - Traffic acquisition by session source / medium.33 - Demographic details by country when source quality matters.34 - Keep the date range explicit, usually the current GA default or the range requested by the user.35364. Parse and classify rows:3738 - Use `python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind pages < exported-text.txt>` when working from copied GA table text.39 - For in-browser extraction, use the JavaScript snippets in the reference and then classify article rows with the same path rules:40 - Article path: `^/(en/)?blog/\d{4}/`41 - English article: path starts with `/en/blog/`42 - Chinese article: path starts with `/blog/`43 - Exclude index pages, tag/category archives, pagination, favicon, 404, and empty paths from article rankings.44455. Produce a decision-oriented report:46 - Lead with the practical conclusion.47 - Include the reporting window and exact GA scope.48 - Separate "Views" from "Landing sessions"; views measure total reading, landing sessions measure acquisition.49 - Treat Direct as potentially self-traffic or unattributed traffic if the user says so, but still state its share.50 - Compare source quality by engagement rate and engagement time, not sessions alone.51 - Compare Chinese vs English pages, and call out whether low English numbers mean no tracking, no generation, or simply low demand.52 - Group articles by topic only as an analytical aid; label the grouping as inferred from URL/title.5354## Report Shape5556Use a concise structure:5758- **Scope**: date range, property, filters, whether Direct is excluded or downweighted.59- **Tracking health**: GA script and live page status.60- **Translation coverage**: paired counts, missing recent translations.61- **Top articles**: views, active users, average engagement time.62- **Landing pages**: sessions and average engagement time for acquisition.63- **Sources**: direct, referral, organic search, social, notable domains.64- **Geography**: countries with high volume and countries with high engagement.65- **Content guidance**: what to write more, what to keep as long tail, what not to over-invest in.6667## Local Commands6869```bash70ruby skills/ga-article-analytics/scripts/audit_translations.rb71python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind pages ga-pages.txt72python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind landing ga-landing.txt73python3 skills/ga-article-analytics/scripts/parse_ga_table.py --kind source ga-sources.txt74```7576If `_site` is stale, build the site before checking generated HTML. If local Jekyll cannot run because Bundler or gems are missing, inspect the existing `_site` output and say that generated output may be stale.