Sunshine UTM Builder makes the UTM-tagged links you put in emails, ads and social posts, so Google Analytics can tell you where your visitors came from. It also keeps your tags spelled the same way every time, since one stray capital letter or space is enough to split a campaign into two rows in your reports.
It lives under Tools UTM Builder. Paste a page, fill in the tags, and your link updates as you type. Everything is free, with no paid version and no account to sign up for.
ref=partner or utm_id#anchor in the link, where Google Analytics can read themGoogle Analytics 4 sorts visits into channels like Organic Social, Email and Paid Search using fixed rules. A medium it doesn’t know, like fb, newsletter or qr, sends those visits to “Unassigned”, where they’re hard to make sense of. The builder shows the channel for every link as you type, and warns you when it would be Unassigned, with a medium to use instead. The Bulk Builder’s preview shows it for every link too.
Google Analytics treats “Email”, “email” and “e-mail” as three different mediums. The formatting rules clean up tags as you type them, so the same thing is always spelled the same way:
Each rule can be turned off in Settings, and the Settings screen shows what a tag will look like before you save.
When one person types facebook, another fb and another Facebook, your reports split three ways. Team lists fix that. List the sources and mediums your team uses in Settings, and the builder offers those as you type. Turn on “Only allow these” and links with anything else aren’t made, in the builder, the Bulk Builder, the REST API and the AI tools.
Save the tags you use a lot, like your newsletter or a partner’s links, and pick the preset to fill them in. Presets can hold tokens that are filled in for each link:
{date} and {date_short} for today’s date{slug} for the last part of the link’s path{page_title} for the title of the post or page, for links on your own site{index} for the link’s number in a batchMake many links at once, four ways:
ref) is added to that row’s link as its own parameter. Commas, semicolons and tabs all work, so files saved from Excel in any language are fine.A preview shows how many links you’ll get and the first 20 of them before anything is saved. Lines that aren’t web addresses are listed so you can fix them.
Every bulk batch is saved, so you can find those links again later.
Turn on link checks and each page is loaded before a batch is saved. Links to pages that don’t load, like a typo or a deleted post, are marked in the batch so you can fix them before they go out.
Long tagged links look messy in social posts and text messages. Short links turn yourdomain.com/sale/?utm_source=facebook&utm_medium=social&utm_campaign=spring_sale into yourdomain.com/x8d89c, which sends visitors on to the full link so the tags still reach Google Analytics. There’s no account to sign up for, and the same long link always gets the same short link. Each one counts its clicks, so you can see which posts people actually clicked.
Short links don’t slow down the rest of your site. A short link is only looked up when no page exists at that address, so normal page views never touch it, and a real page always wins over a short link. If you’d like them answered even faster, add a short word in front, like yourdomain.com/g/x8d89c, and they’re handled before WordPress looks for a page. Links you’ve already shared keep working if you change that word later.
Each short link has its own page under Tools UTM Builder Short Links:
yourdomain.com/spring-sale, so people can read and type itThe Short Links tab also totals clicks by campaign, so you can see how a whole campaign did at a glance.
You can also connect your own Bitly or Rebrandly account. Set up as many as you like, and pick one each time under “Shorten with”, right above your link.
Ask an AI assistant for “a tagged link to the spring sale page for our Facebook post” and it can make the link on your site, with your presets, your formatting rules and your short links, so its links match yours. The plugin adds three abilities through the WordPress Abilities API (WordPress 6.9 and later):
AI tools like Claude connect to them through the MCP Adapter plugin. Scripts and other tools can run them at /wp-json/wp-abilities/v1/abilities/sunshine-utm/build-link/run. Both need an administrator login, and an Application Password works well for that.
Send a POST to /wp-json/sunshine-utm/v1/links with a list of urls and the tags (source, medium, campaign, term, content) to get tagged links back. Add "save": true to keep them as a batch. The endpoint only answers requests from administrators.
This plugin makes the links and counts clicks on your short links, and Google Analytics shows the visits they bring. If you’d like to see which campaigns turn into sales and form entries on your WordPress site, Conversion Bridge records the UTM tags behind each conversion. When both plugins are active, the Short Links tab shows conversions next to clicks for each short link, and Conversion Bridge’s own small UTM builder steps aside for this one.
QR codes are made with QRCode for JavaScript by Kazuhiko Arase (MIT license). “QR Code” is a registered trademark of DENSO WAVE INCORPORATED.
This plugin only contacts other services for the features below, and only when you use them.
If you choose Bitly as your link shortener in Settings, the link being shortened is sent to Bitly’s API (api-ssl.bitly.com) along with your access token. That happens when you pick Bitly under “Shorten with” in the builder, when you create a batch with shortening on, and when the AI tools or the API ask for a short link. Bitly sends back the short link. Terms of service, privacy policy.
If you choose Rebrandly as your link shortener in Settings, the link being shortened is sent to Rebrandly’s API (api.rebrandly.com) along with your API key, at the same times as for Bitly above. Rebrandly sends back the short link. Terms and conditions, privacy policy.
If you turn on link checks in Settings, each page a batch links to is requested once when the batch is created, to see whether it loads. The request goes to whatever site that page is on, and nothing is sent besides the request itself. Link checks are off by default.