dannybosie / tools / utm-governor

utm-governor

Attribution Hygiene Linter

Build and audit UTM links against one taxonomy, and see the GA4 channel each link will land in before the budget goes live. Catches the links that fall into Unassigned, split your reports by casing, or overwrite the real source.

Build a link

GA4 channel

    Audit your links

    0%
    Attribution Leakage Score

    Every tagged link

    LineGA4 channelLinkIssues

    What GA4 actually does with Vietnamese traffic

    zalo counts, zalo.me does notGA4's social list has zalo and chat.zalo.me, not zalo.me. Paid traffic tagged zalo.me lands in Paid Other.
    No Vietnamese marketplace is a shopping siteShopee, Lazada and Tiki are on none of GA4's lists. Paid traffic from them is Paid Other unless the campaign name contains "shop".
    TikTok is social, not videotiktok with a paid medium is Paid Social. With medium "video" it is still Organic Social, because the social rule is checked first.
    Cốc Cốc is not a search engine to GA4coccoc is on no list, so paid clicks tagged coccoc land in Paid Other. If Cốc Cốc matters to you, map it in a custom channel group.
    QR codes and print are UnassignedGA4 has no offline channel. Accept it knowingly (allowUnassigned) or map it in a custom channel group.
    New since May 2026: AI AssistantGA4 files ChatGPT, Gemini and Copilot referrals under AI Assistant. The medium it uses is ai-assistant.

    Your taxonomy

    Edit the rules every link is checked against

    Allowed sources and mediums, the separator, a campaign naming pattern, your own domains and the mediums you accept as Unassigned. Saved in this browser only. Use the same JSON as utm-taxonomy.json in the CLI.

    Put it in your pipeline

    npx github:dannybosie/utm-governor check links.csv
    npx github:dannybosie/utm-governor channel zalo.me cpc      # Paid Other
    - uses: dannybosie/utm-governor@v1
      with:
        paths: marketing/links.csv content/

    Rules follow Google's GA4 default channel group as of May 2026, with Google's source category list. Channel definitions in GA4 are not case sensitive; reports are.