{"id":333994,"date":"2026-07-09T14:06:46","date_gmt":"2026-07-09T14:06:46","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ccd-traffic-sources\/"},"modified":"2026-07-09T14:06:18","modified_gmt":"2026-07-09T14:06:18","slug":"ccd-traffic-sources","status":"publish","type":"plugin","link":"https:\/\/lij.wordpress.org\/plugins\/ccd-traffic-sources\/","author":20979859,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"CCD Traffic Sources","header_author":"CCDesign.gr","header_description":"Conversion attribution dashboard for form submissions and contact clicks with UTM, referrer and traffic source tracking.","assets_banners_color":"133360","last_updated":"2026-07-09 14:06:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ccdesign.gr\/wordpress-plugins\/traffic-sources","header_author_uri":"https:\/\/ccdesign.gr\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":28,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kaxrist","date":"2026-07-09 14:06:18"}},"upgrade_notice":{"1.0.0":"<ul>\n<li>Initial public release.<\/li>\n<\/ul>"},"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3601592,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3601592,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3601592,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3601592,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3601592,"resolution":"1","location":"assets","locale":"","width":3840,"height":1760},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3601592,"resolution":"2","location":"assets","locale":"","width":3200,"height":1360},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3601592,"resolution":"3","location":"assets","locale":"","width":2800,"height":1960},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3601592,"resolution":"4","location":"assets","locale":"","width":2800,"height":1520}},"screenshots":{"1":"Dashboard overview.","2":"Filtered paid conversions.","3":"Tracking and privacy settings.","4":"GA4\/GTM setup."}},"plugin_section":[],"plugin_tags":[232,5375,986,30680,270724],"plugin_category":[36],"plugin_contributors":[266287],"plugin_business_model":[],"class_list":["post-333994","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-click-tracking","plugin_tags-conversion-tracking","plugin_tags-form-tracking","plugin_tags-traffic-attribution","plugin_category-analytics","plugin_contributors-kaxrist","plugin_committers-kaxrist"],"banners":{"banner":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/banner-772x250.jpg?rev=3601592","banner_2x":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/banner-1544x500.jpg?rev=3601592","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/icon-128x128.jpg?rev=3601592","icon_2x":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/icon-256x256.jpg?rev=3601592","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/screenshot-1.png?rev=3601592","caption":"Dashboard overview."},{"src":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/screenshot-2.png?rev=3601592","caption":"Filtered paid conversions."},{"src":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/screenshot-3.png?rev=3601592","caption":"Tracking and privacy settings."},{"src":"https:\/\/ps.w.org\/ccd-traffic-sources\/assets\/screenshot-4.png?rev=3601592","caption":"GA4\/GTM setup."}],"raw_content":"<!--section=description-->\n<p>CCD Traffic Sources is a lightweight conversion attribution dashboard for WordPress. It shows which traffic sources, campaigns, landing pages and contact actions led to enquiries.<\/p>\n\n<p>It can capture UTM data, but its main purpose is not only UTM storage. The plugin records selected conversion actions in a local WordPress dashboard: form submissions, phone\/email clicks, chat clicks and direction clicks. Each event can include first-touch and current-touch source, medium, campaign, channel, referrer and landing page details.<\/p>\n\n<p>Use it to see which channels, campaigns and landing pages led to forms, calls, email clicks or chat clicks.<\/p>\n\n<h4>What it tracks<\/h4>\n\n<ul>\n<li>Form submissions from regular frontend POST forms<\/li>\n<li>Elementor Pro forms and common WordPress form plugins, with AJAX success hooks where available<\/li>\n<li>Phone link clicks using <code>tel:<\/code><\/li>\n<li>Email link clicks using <code>mailto:<\/code><\/li>\n<li>SMS link clicks using <code>sms:<\/code><\/li>\n<li>WhatsApp, Telegram, Viber and Messenger links<\/li>\n<li>Direction links for Google Maps, Apple Maps, Waze and <code>geo:<\/code><\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Conversion attribution dashboard with custom date range, event, form and channel filters<\/li>\n<li>Configurable dashboard metric cards for conversion types and traffic channels<\/li>\n<li>First-touch and current-touch source, medium, campaign, channel, landing page and referrer<\/li>\n<li>UTM tracking for <code>utm_source<\/code>, <code>utm_medium<\/code>, <code>utm_campaign<\/code>, <code>utm_term<\/code> and <code>utm_content<\/code><\/li>\n<li>Paid click ID detection for Google Ads, Microsoft Ads, Meta, TikTok, LinkedIn and Yandex<\/li>\n<li>Hidden attribution fields for Elementor forms and opt-in custom forms<\/li>\n<li>Manual JavaScript API for buttons or widgets that do not use standard links<\/li>\n<li>Optional consent mode for cookie banner integrations<\/li>\n<li>Sourcebuster compatibility mode that can reuse an existing instance<\/li>\n<li>Sensitive query parameter stripping before URLs are stored<\/li>\n<li>Configurable event retention: 90 days, 180 days, 365 days or never<\/li>\n<li>Optional GA4\/GTM event sending, disabled by default<\/li>\n<li>GTM-friendly <code>dataLayer<\/code> mode that does not load another Google script<\/li>\n<li>One custom database table for the conversion log<\/li>\n<li>No raw IP address or geolocation storage<\/li>\n<li>No jQuery dependency on the frontend<\/li>\n<\/ul>\n\n<h4>Privacy and local storage<\/h4>\n\n<p>By default, CCD Traffic Sources stores conversion events only on your own WordPress site. It does not send data to external analytics services unless the site administrator enables the optional GA4\/GTM event sending setting.<\/p>\n\n<p>The plugin uses first-party attribution cookies to associate conversions with their traffic source. These cookies can include traffic source details, referring URL, entry page, visit\/session counts and browser user agent information. No raw IP addresses or geolocation data are stored. Sensitive URL parameters commonly used for advertising, sessions or personal information are removed before URLs are saved.<\/p>\n\n<p>An optional Consent Mode can delay tracking until visitor consent has been granted. The plugin also registers suggested privacy policy content in the WordPress Privacy Policy Guide.<\/p>\n\n<h4>Frontend REST event endpoint<\/h4>\n\n<p>CCD Traffic Sources intentionally registers frontend REST endpoints so logged-out visitors can request a short-lived event token and submit conversion events. These endpoints are not admin or settings APIs. They do not expose dashboard data and cannot create, update or delete WordPress content, users or options.<\/p>\n\n<p>The event endpoint accepts only supported conversion event payloads. Before an event is inserted into the plugin's custom database table, the request must pass a short-lived event token check, same-site origin\/referrer checks, content type validation, schema validation, payload size limits, duplicate UUID handling and IP-based rate limiting.<\/p>\n\n<h3>External services<\/h3>\n\n<p>No external service is contacted by default.<\/p>\n\n<p>CCD Traffic Sources can connect to Google Analytics \/ Google Tag Manager only when the site administrator enables the optional GA4\/GTM event sending setting. This feature is disabled by default.<\/p>\n\n<p>Google Analytics \/ Google Tag Manager is provided by Google LLC and its affiliates. The plugin uses it to send selected conversion events, such as form submissions and supported contact link clicks, to the site's own Google Analytics or Google Tag Manager setup.<\/p>\n\n<p>When the sending method is set to <code>GTM dataLayer event<\/code>, the plugin pushes a local <code>dataLayer<\/code> event named <code>ccdesign_traffic_sources_conversion<\/code>. The plugin does not load a Google script for this method, but the site's existing Google Tag Manager container may read that event and send it to Google according to the site's GTM setup.<\/p>\n\n<p>When the sending method is set to <code>Use existing gtag only<\/code>, the plugin calls the existing <code>window.gtag<\/code> function if another theme, plugin or custom integration has already loaded it. The plugin does not load a Google script for this method.<\/p>\n\n<p>When the sending method is set to <code>Load gtag.js directly<\/code>, the plugin loads Google's script from <code>https:\/\/www.googletagmanager.com\/gtag\/js<\/code> on frontend pages where tracking is active. The configured GA4 Measurement ID is included in the script URL. Standard browser request information, such as IP address, user agent and referrer, may be received by Google when this script is requested.<\/p>\n\n<p>When a tracked conversion event is sent through GA4\/GTM, the event data can include the GA4 event name, the plugin event type, sanitized page path, traffic channel, current source\/medium\/campaign, first source\/medium\/campaign, optional UTM term\/content, and either form metadata such as form system, form ID and form name, or the contact click type. The plugin does not intentionally send raw IP addresses, geolocation data, email addresses, phone numbers or full clicked contact targets to Google.<\/p>\n\n<p>Google service links:<\/p>\n\n<ul>\n<li>Google Analytics Terms of Service: https:\/\/www.google.com\/analytics\/terms\/<\/li>\n<li>Google Terms of Service: https:\/\/policies.google.com\/terms<\/li>\n<li>Google Privacy Policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>CCD Traffic Sources includes Sourcebuster JS as <code>assets\/js\/sbjs.min.js<\/code> for first-party attribution cookies.<\/p>\n\n<p>Bundled Sourcebuster JS details:<\/p>\n\n<ul>\n<li>Version: 1.0.5<\/li>\n<li>License: MIT<\/li>\n<li>Upstream source: https:\/\/github.com\/alex35mil\/sourcebuster-js<\/li>\n<li>License notices: <code>third-party-notices.txt<\/code><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>ccd-traffic-sources<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin zip through Plugins &gt; Add New.<\/li>\n<li>Activate CCD Traffic Sources.<\/li>\n<li>Submit a frontend form or click a supported contact link.<\/li>\n<li>Open Traffic Sources in the WordPress admin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20only%20a%20utm%20grabber%3F\"><h3>Is this only a UTM grabber?<\/h3><\/dt>\n<dd><p>No. The plugin can capture UTM\/source data and fill supported hidden fields, but its main purpose is a local conversion attribution dashboard for enquiries and contact actions.<\/p><\/dd>\n<dt id=\"which%20contact%20links%20are%20tracked%20automatically%3F\"><h3>Which contact links are tracked automatically?<\/h3><\/dt>\n<dd><p>Phone, email, SMS, WhatsApp, Telegram, Viber, Messenger and direction links are detected from their URL format. Existing buttons and widgets usually work without changing the link. Buttons that trigger contact actions only through custom JavaScript can use the manual tracking API.<\/p><\/dd>\n<dt id=\"which%20form%20plugins%20does%20it%20work%20with%3F\"><h3>Which form plugins does it work with?<\/h3><\/dt>\n<dd><p>It works with regular frontend POST forms and includes detection labels for Elementor, Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Formidable Forms, Ninja Forms and WPBakery-rendered forms. Unsupported forms are still tracked as generic forms when they submit normally.<\/p><\/dd>\n<dt id=\"does%20it%20track%20successful%20form%20submissions%20or%20submit%20attempts%3F\"><h3>Does it track successful form submissions or submit attempts?<\/h3><\/dt>\n<dd><p>For generic forms, the event is recorded after the browser says the form is valid and the submit event fires. For supported AJAX flows, the plugin listens for successful submission events where available. Some custom forms can still reject a submission server-side without exposing a reliable frontend success event, so treat form tracking as a conversion signal rather than an authoritative CRM lead total.<\/p><\/dd>\n<dt id=\"how%20do%20i%20track%20a%20custom%20button%20that%20is%20not%20a%20link%3F\"><h3>How do I track a custom button that is not a link?<\/h3><\/dt>\n<dd><p>Use the manual JavaScript API after the frontend tracker is loaded:<\/p>\n\n<pre><code>window.CCDTrafficSources.track({ event: 'whatsapp_click', target: 'https:\/\/wa.me\/...' });\n<\/code><\/pre>\n\n<p>The event value should be one of the supported event types, such as <code>form_submit<\/code>, <code>tel_click<\/code>, <code>mailto_click<\/code>, <code>whatsapp_click<\/code>, <code>viber_click<\/code>, <code>messenger_click<\/code> or <code>directions_click<\/code>.<\/p><\/dd>\n<dt id=\"why%20is%20the%20dashboard%20empty%20after%20activation%3F\"><h3>Why is the dashboard empty after activation?<\/h3><\/dt>\n<dd><p>The dashboard fills only after a visitor submits a tracked form or clicks a supported contact link. It does not import old analytics data and it does not count ordinary pageviews.<\/p><\/dd>\n<dt id=\"does%20it%20send%20events%20to%20google%20analytics%204%3F\"><h3>Does it send events to Google Analytics 4?<\/h3><\/dt>\n<dd><p>Only if you enable GA4 events in Settings. The default and recommended method for sites using Google Tag Manager is <code>dataLayer<\/code>, which lets GTM handle the final GA4 event without the plugin loading <code>gtag.js<\/code>.<\/p><\/dd>\n<dt id=\"how%20long%20is%20conversion%20data%20stored%3F\"><h3>How long is conversion data stored?<\/h3><\/dt>\n<dd><p>The retention setting can delete events after 90, 180 or 365 days, or keep them until they are manually removed. The default is 365 days. Uninstalling the plugin removes plugin options, scheduled cleanup events and the custom event table.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20woocommerce%20order%20attribution%20or%20another%20sourcebuster%20install%3F\"><h3>Will it conflict with WooCommerce Order Attribution or another Sourcebuster install?<\/h3><\/dt>\n<dd><p>The default Sourcebuster mode is Auto Detect. When another plugin already provides a compatible <code>window.sbjs<\/code> instance, CCD Traffic Sources reuses it instead of loading another copy.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release.<\/li>\n<\/ul>","raw_excerpt":"Conversion attribution dashboard for forms and contact clicks with UTM, referrer and source tracking.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/333994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=333994"}],"author":[{"embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kaxrist"}],"wp:attachment":[{"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=333994"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=333994"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=333994"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=333994"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=333994"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lij.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=333994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}