{"id":291281,"date":"2026-03-26T19:12:01","date_gmt":"2026-03-26T19:12:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/utm-tracker-for-elementor\/"},"modified":"2026-03-26T19:21:15","modified_gmt":"2026-03-26T19:21:15","slug":"shulman-utm-attribution-for-elementor","status":"publish","type":"plugin","link":"https:\/\/fuc.wordpress.org\/plugins\/shulman-utm-attribution-for-elementor\/","author":21137828,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.7.12","stable_tag":"1.7.12","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Shulman UTM Attribution for Elementor","header_author":"Ranel Shulman","header_description":"Simple and reliable UTM tracking for Elementor Forms and WooCommerce with First Click and Last Click attribution support.","assets_banners_color":"","last_updated":"2026-03-26 19:21:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":64,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.7.12":{"tag":"1.7.12","author":"ranelshulman","date":"2026-03-26 19:21:15"}},"upgrade_notice":{"1.4.0":"<p>Adds the UTM Attribution Dashboard for Elementor form submissions. After activation, attribution records are stored automatically \u2014 no manual database steps required. Deactivating and re-activating will not affect existing data.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.7.12"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"UTM Attribution Dashboard with summary cards and color-coded source column","2":"WooCommerce Orders table with UTM Source column and filter dropdown","3":"UTM Tracking meta box on a single order page","4":"Plugin Settings page \u2014 form ID management and WooCommerce toggle"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[9067,76538,550,24188,286],"plugin_category":[36,45],"plugin_contributors":[258723],"plugin_business_model":[],"class_list":["post-291281","plugin","type-plugin","status-publish","hentry","plugin_tags-attribution","plugin_tags-elementor","plugin_tags-tracking","plugin_tags-utm","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-ranelshulman","plugin_committers-ranelshulman"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/shulman-utm-attribution-for-elementor.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Shulman UTM Attribution for Elementor<\/strong> brings real marketing attribution directly into your WordPress site.<\/p>\n\n<p>Instead of relying only on external tools like Google Analytics, this plugin connects your traffic sources to actual leads and WooCommerce orders \u2014 so you can understand what truly drives results.<\/p>\n\n<p>Know not just what happened \u2014 but what caused it.<\/p>\n\n<h4>Why This Matters<\/h4>\n\n<p>Most analytics tools show you traffic.<\/p>\n\n<p>This plugin shows you <strong>what actually generated the lead or sale<\/strong>.<\/p>\n\n<ul>\n<li>Which campaign brought the customer?<\/li>\n<li>Which source deserves the credit?<\/li>\n<li>What really works in your marketing?<\/li>\n<\/ul>\n\n<p>No more guessing. No more \u201cdirect traffic\u201d confusion.<\/p>\n\n<h4>Attribution Model<\/h4>\n\n<p>Built around a <strong>Last Non-Direct Click model (like Google Analytics)<\/strong>:<\/p>\n\n<ul>\n<li>Direct visits never overwrite real marketing sources<\/li>\n<li>Internal navigation does not break attribution<\/li>\n<li>Previous campaigns keep their credit<\/li>\n<\/ul>\n\n<p>Optional: enable <strong>First Click + Last Click tracking<\/strong> for deeper funnel analysis.<\/p>\n\n<h4>Core Features<\/h4>\n\n<p>Built to give you reliable, real-world attribution \u2014 not just raw data:<\/p>\n\n<ul>\n<li><strong>Last Non-Direct Click attribution<\/strong> \u2013 direct visits and internal page navigation never overwrite a previously stored source, matching Google Analytics default behavior<\/li>\n<li><strong>7-day attribution window<\/strong> \u2013 UTM data persists for 7 days in localStorage and as a cookie<\/li>\n<li><strong>Auto-fills Elementor hidden fields<\/strong> \u2013 works with standard <code>utm_source<\/code>, <code>utm_medium<\/code>, <code>utm_campaign<\/code>, <code>utm_content<\/code>, <code>utm_term<\/code> field IDs<\/li>\n<li><strong>First Click + Last Click mode<\/strong> \u2013 optional per-form dual attribution using <code>fc_<\/code> \/ <code>lc_<\/code> prefixed field IDs<\/li>\n<li><strong>50+ referrer sources detected<\/strong> \u2013 search engines, social networks, messaging apps (WhatsApp, Telegram, Viber), email providers (Gmail, Outlook, Yahoo Mail), video platforms, Israeli news sites, and more<\/li>\n<li><strong>Click-ID detection<\/strong> \u2013 <code>gclid<\/code> (Google Ads), <code>fbclid<\/code> (Meta), <code>msclkid<\/code> (Bing), <code>ttclid<\/code> (TikTok), <code>li_fat_id<\/code> (LinkedIn), <code>twclid<\/code> (Twitter), <code>epik<\/code> (Pinterest), <code>dclid<\/code> (Google Display)<\/li>\n<li><strong>Priority chain<\/strong> \u2013 UTM params \u2192 Click-ID \u2192 Referrer \u2192 Direct (never overwrites)<\/li>\n<li><strong>localStorage fallback<\/strong> \u2013 if localStorage is blocked, falls back to cookie; marks lead as \"untracked\" when both are unavailable<\/li>\n<\/ul>\n\n<h4>UTM Attribution Dashboard (Elementor Pro)<\/h4>\n\n<p>When Elementor Pro is installed, every form submission is captured with full UTM attribution data and displayed in a dedicated reporting dashboard:<\/p>\n\n<ul>\n<li>New admin page <strong>UTM Attribution \u2192 Attribution Dashboard<\/strong> \u2014 view lead attribution data at a glance<\/li>\n<li>See source, medium, campaign, and attribution coverage for every captured lead<\/li>\n<li>Color-coded Source column (paid = orange, organic = green, social = blue, email = purple)<\/li>\n<li>Summary cards: Total leads \u00b7 Attributed leads \u00b7 Top source \u00b7 Attribution rate %<\/li>\n<li>Filter by form and by UTM source to analyze top-performing traffic segments<\/li>\n<li>Full-text search across name, email, source, campaign<\/li>\n<li>Export attribution records to CSV for offline analysis (UTF-8 with BOM for Excel compatibility)<\/li>\n<li>Bulk delete old records<\/li>\n<\/ul>\n\n<p>This screen is designed for attribution and marketing analysis. Elementor's native submissions table remains the primary source for full form-entry details.<\/p>\n\n<h4>WooCommerce Integration<\/h4>\n\n<p>Turn every order into actionable marketing insight:<\/p>\n\n<ul>\n<li>See exactly which source generated each order<\/li>\n<li>Filter orders by traffic source<\/li>\n<li>Export attribution data for analysis<\/li>\n<li>Works with HPOS and legacy storage<\/li>\n<\/ul>\n\n<p>No external tools required.<\/p>\n\n<p>Enable via <strong>UTM Attribution \u2192 Settings \u2192 Enable WooCommerce tracking<\/strong>:<\/p>\n\n<ul>\n<li>Saves UTM source\/medium\/campaign\/content\/term\/id to every order as order meta<\/li>\n<li>Adds a color-coded <strong>UTM Source<\/strong> column to the WooCommerce Orders table<\/li>\n<li>Adds a <strong>UTM Tracking<\/strong> meta box to each order detail page<\/li>\n<li>Filter orders by UTM source using the dropdown in the Orders filter bar<\/li>\n<li>UTM columns included in WooCommerce CSV export<\/li>\n<li>Compatible with both HPOS and Legacy order storage<\/li>\n<\/ul>\n\n<h4>Elementor Form Setup<\/h4>\n\n<p><strong>Last Click only (default \u2014 no configuration needed):<\/strong><\/p>\n\n<p>Add hidden fields with these IDs to your Elementor form:\n    utm_source \u00b7 <code>utm_medium<\/code> \u00b7 <code>utm_campaign<\/code> \u00b7 <code>utm_content<\/code> \u00b7 <code>utm_term<\/code> \u00b7 <code>utm_id<\/code><\/p>\n\n<p><strong>First Click + Last Click (configure Form ID in Settings):<\/strong><\/p>\n\n<p>Add hidden fields with these IDs:\nFirst click: <code>fc_source<\/code> \u00b7 <code>fc_medium<\/code> \u00b7 <code>fc_campaign<\/code> \u00b7 <code>fc_content<\/code> \u00b7 <code>fc_term<\/code>\nLast click:  <code>lc_source<\/code> \u00b7 <code>lc_medium<\/code> \u00b7 <code>lc_campaign<\/code> \u00b7 <code>lc_content<\/code> \u00b7 <code>lc_term<\/code><\/p>\n\n<h4>Privacy &amp; GDPR<\/h4>\n\n<ul>\n<li>All data is stored locally in the visitor's browser (localStorage + cookie)<\/li>\n<li>No data is sent to external servers<\/li>\n<li>Cookie name: <code>shulmanattrib_utm_data<\/code>, expiry: 7 days, contains only marketing source data (no PII)<\/li>\n<li>Leads are stored in your own WordPress database for attribution reporting<\/li>\n<li>Add the cookie to your cookie consent notice<\/li>\n<li>No external APIs, no third-party tracking, no data sharing<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Go to <strong>UTM Attribution \u2192 Settings<\/strong> to configure options<\/li>\n<li>Add hidden UTM fields to your Elementor forms (see Elementor Form Setup above)<\/li>\n<li>Optionally enable WooCommerce integration<\/li>\n<\/ol>\n\n<p><strong>Upgrading from 1.3.x:<\/strong>\nThe <code>wp_ute_leads<\/code> table is created automatically on first load after activation \u2014 no manual steps required.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20without%20elementor%20pro%3F\"><h3>Does this work without Elementor Pro?<\/h3><\/dt>\n<dd><p>Yes. The frontend JS and WooCommerce integration work with Elementor free. The Attribution Dashboard requires Elementor Pro (for the <code>elementor_pro\/forms\/new_record<\/code> hook).<\/p><\/dd>\n<dt id=\"does%20this%20conflict%20with%20woocommerce%27s%20built-in%20attribution%20%28v8.5%2B%29%3F\"><h3>Does this conflict with WooCommerce's built-in attribution (v8.5+)?<\/h3><\/dt>\n<dd><p>No. WooCommerce's native attribution operates independently. This plugin adds its own meta fields (<code>_ute_utm_*<\/code>) and does not modify WooCommerce's attribution data.<\/p><\/dd>\n<dt id=\"what%20is%20%22last%20non-direct%20click%22%3F\"><h3>What is \"Last Non-Direct Click\"?<\/h3><\/dt>\n<dd><p>It means that if a visitor first arrives via Google Ads (gclid), then returns directly three days later to convert, the conversion is attributed to Google Ads \u2014 not to \"direct\". This matches Google Analytics 4 default behavior. Direct traffic only gets credit when no prior source exists.<\/p><\/dd>\n<dt id=\"can%20i%20track%20both%20the%20first%20and%20last%20click%3F\"><h3>Can I track both the first and last click?<\/h3><\/dt>\n<dd><p>Yes. Add the Form ID to the First+Last Click list in Settings, then add <code>fc_*<\/code> and <code>lc_*<\/code> hidden fields to that form. All other forms use last-click only.<\/p><\/dd>\n<dt id=\"is%20fbclid%20treated%20as%20paid%20traffic%3F\"><h3>Is fbclid treated as paid traffic?<\/h3><\/dt>\n<dd><p>No. <code>fbclid<\/code> is appended to all Meta link clicks \u2014 both paid ads and organic posts \u2014 so it cannot reliably indicate paid traffic. The plugin records <code>fbclid<\/code> visits as <code>facebook \/ social<\/code>. For reliable paid attribution, use explicit UTM tags (<code>utm_medium=paid_social<\/code>) on your campaigns.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20localstorage%20is%20blocked%3F\"><h3>What happens if localStorage is blocked?<\/h3><\/dt>\n<dd><p>The plugin falls back to the cookie. If the cookie is also unavailable (e.g. Safari ITP in certain configurations), the lead is saved with <code>utm_source<\/code> from the server-side referrer fallback, or marked as \"untracked\" if no referrer is available.<\/p><\/dd>\n<dt id=\"how%20do%20i%20add%20the%20cookie%20to%20my%20cookie%20consent%20banner%3F\"><h3>How do I add the cookie to my cookie consent banner?<\/h3><\/dt>\n<dd><p>Add a cookie named <code>shulmanattrib_utm_data<\/code>, category: Marketing\/Analytics, duration: 7 days, description: \"Stores the visitor's UTM traffic source for marketing attribution.\"<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.12<\/h4>\n\n<ul>\n<li>FIX: replaced inline admin JavaScript and CSS with properly enqueued assets<\/li>\n<li>FIX: switched public plugin-specific identifiers to the shulmanattrib prefix where applicable<\/li>\n<li>FIX: renamed admin\/export identifiers for cleaner WordPress.org review compliance<\/li>\n<li>FIX: updated cookie documentation and packaging for the renamed plugin<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>NEW: UTM Leads admin page \u2014 captures every Elementor Pro form submission with full UTM attribution<\/li>\n<li>NEW: wp_ute_leads database table \u2014 stores form_id, form_name, lead name, email, all UTM fields, timestamp<\/li>\n<li>NEW: Summary dashboard cards \u2014 Total leads \/ Tracked \/ Top source \/ Attribution rate<\/li>\n<li>NEW: Filter by form and by UTM source; full-text search; Export CSV; bulk delete<\/li>\n<li>NEW: UTM Attribution top-level admin menu with Settings and UTM Leads submenus<\/li>\n<li>NEW: load_plugin_textdomain() \u2014 plugin is now translation-ready<\/li>\n<li>NEW: uninstall.php \u2014 clean removal of all options and the ute_leads table on plugin delete<\/li>\n<li>FIX: fbclid mapped to medium 'social' instead of 'paid' (fbclid appears on organic Meta clicks too)<\/li>\n<li>FIX: twclid (Twitter) and epik (Pinterest) also mapped to medium 'social'<\/li>\n<li>NEW: dclid (Google Display &amp; Video) added to click-ID map with medium 'display'<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>FIX: Last Non-Direct Click model applied consistently to localStorage, lc_ prefix, and WooCommerce cookie<\/li>\n<li>FIX: saveUtmData() now clears all existing UTM keys before writing new ones (stale fields fixed)<\/li>\n<li>FIX: mail.yahoo.com correctly identified as email\/yahoo-mail (was: organic\/yahoo)<\/li>\n<li>FIX: x.com false positive \u2014 lax.com, ajax.com etc. no longer misidentified as Twitter\/X<\/li>\n<li>FIX: t.co false positive \u2014 bit.com, mat.com etc. no longer misidentified as Twitter\/X<\/li>\n<li>FIX: t.me false positive \u2014 statement.me, art.me etc. no longer misidentified as Telegram<\/li>\n<li>FIX: Google Maps (maps.google.com) now correctly detected before generic Google check<\/li>\n<li>FIX: PHP legacy meta_query array initialised defensively before appending filter<\/li>\n<li>IMPROVED: via value renamed 'internal' for internal navigation (was 'direct')<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>NEW: UTM Source filter dropdown in WooCommerce Orders table<\/li>\n<li>NEW: CSV Export includes UTM Source, Medium, Campaign, Content, Term columns<\/li>\n<li>IMPROVED: Filter works with both HPOS and Legacy order storage<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>NEW: Click-ID detection \u2014 fbclid, gclid, msclkid, ttclid, li_fat_id, twclid, epik, dclid<\/li>\n<li>FIX: Replaced AJAX\/sendBeacon with cookie-based storage (eliminates race condition on order creation)<\/li>\n<li>FIX: Default \"direct \/ none\" written to order meta when no source data exists<\/li>\n<li>IMPROVED: \"untracked\" shown when localStorage is blocked<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>NEW: WooCommerce integration \u2014 UTM source tracking for orders<\/li>\n<li>NEW: \"UTM Source\" column in WooCommerce Orders table<\/li>\n<li>NEW: \"UTM Tracking (7-day)\" meta box on single order page<\/li>\n<li>NEW: Enable\/Disable WooCommerce feature via Settings UI<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>FIX: Internal navigation (same domain) no longer overwrites stored UTM source<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>NEW: Extended referrer detection (50+ sources)<\/li>\n<li>NEW: Israeli news sites (Ynet, Walla, Mako, Haaretz, etc.)<\/li>\n<li>NEW: Messaging apps (WhatsApp, Telegram, Messenger, Viber, Line)<\/li>\n<li>NEW: Email providers (Gmail, Outlook, Yahoo Mail, ProtonMail)<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>FIX: Support for Elementor's form-field- prefix on input names\/IDs<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Understand where your leads and sales really come from \u2014 built-in attribution (First &amp; Last Click) directly inside WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/291281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=291281"}],"author":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ranelshulman"}],"wp:attachment":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=291281"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=291281"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=291281"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=291281"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=291281"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=291281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}