Software, your way.
burger menu icon
WillMaster

WillMaster > LibraryStatistics and Tracking

FREE! Coding tips, tricks, and treasures.

Possibilities weekly ezine

Get the weekly email website developers read:

 

Your email address

name@example.com
YES! Send Possibilities every week!

Logging Link Clicks

Sometimes it is desirable to know how often a certain link is clicked or tapped. Reasons include:

  1. Determining degree of interest by counting number of clicks.

  2. Logging clicks on a link you're being paid for, or an ad.

  3. To see which links are the most popular on a specific page.

Any regular HTML a tag link can be enabled for logging. Enabling entails inserting this attribute:

onclick="return LinkClicked(this)"

When the link is clicked, a JavaScript LinkClicked() function sends the link details to a PHP script for logging.

The log is a CSV file. The following items are logged when the link is enabled for logging:

  1. The date and time.

  2. The site visitor's IP address.

  3. The URL of the web page containing the link.

  4. The URL of the referring web page, if applicable.

  5. The link URL that was clicked.

This system can let you know how many times certain links are clicked or tapped. And when.

When imported into a spreadsheet, duplicate IP addresses in the log can be removed for a more accurate count.

How to Implement Click Logging

When a link is clicked or tapped, JavaScript tells a PHP script on your server to log the event. The log is a CSV file with one log line per click or tap. The log lines look something like this:

"2024-12-22 01:20:47","127.43.9.213","https://example.com/page.php","https://example.com/other.php","https://example.com/destination.php"
"2024-12-22 01:32:26","12.74.117.8","https://example.com/page.php","","https://destination.com/page.php"

The 5 items of the log line are in the order mentioned in the list further above.

The actual logging is done with a PHP script on your server. The PHP script gets its instructions from JavaScript on the web page where an enabled link is clicked.

Here is the source code of the PHP script. Notes follow.

<?php
/* 
   Log Clicks
   Version 1.0
   September 12, 2021

   Will Bontrager Software LLC
   https://www.willmaster.com/
   Copyright 2021 Will Bontrager Software, LLC
*/

/* Customization */
// Specify the location of the CSV file for recording the link clicks.

$FileLocation = '/php/logging/LogClicks.csv';

/* No other customizations required. */
if( empty($_GET['desturl']) ) { exit; }
if( strpos($FileLocation,'/')===0 ) { $FileLocation=$_SERVER['DOCUMENT_ROOT'].(preg_replace('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',$FileLocation)); }
$LogPart = array();
$LogPart[] = '"'.str_replace('"',"\\".'"',date('Y-m-d H:i:s')).'"';
$LogPart[] = '"'.str_replace('"',"\\".'"',(isset($_GET['ip']) and preg_match('/^[\d\.]+$/',$_GET['ip']))?$_GET['ip']:$_SERVER['REMOTE_ADDR']).'"';
$LogPart[] = '"'.str_replace('"',"\\".'"',$_GET['pageurl']).'"';
$LogPart[] = '"'.str_replace('"',"\\".'"',$_GET['refurl']).'"';
$LogPart[] = '"'.str_replace('"',"\\".'"',$_GET['desturl']).'"';
file_put_contents($FileLocation,implode(',',$LogPart)."\n",FILE_APPEND);
?>

Notes —

In the PHP script, replace /php/logging/LogClicks.csv with the location for the CSV file.

The script will create the CSV file if it doesn't already exist. However, the directory for the file needs to exist before the file can be created.

Save the PHP script as LogClick.php or other *.php file name. Upload it to your server and note its URL.

LogClick.php gets its information from JavaScript on the web page where an enabled link is clicked.

Here is the source code of the JavaScript. Notes follow.

<script type="text/javascript">
function LinkClicked(d)
{
   var scripturl = "/php/LogClick.php";
   var http = new XMLHttpRequest();
   if(! http) { return true; }
   var params = new Array();
   params.push( "ip=" + encodeURIComponent("<?php echo($_SERVER['REMOTE_ADDR']) ?>") );
   params.push( "pageurl=" + encodeURIComponent(document.URL) );
   params.push( "refurl=" + encodeURIComponent(document.referrer) );
   params.push( "desturl=" + encodeURIComponent(d.href) );
   http.onreadystatechange = function(){if(http.readyState==4 && http.status==200){return true;}}
   http.open("GET",scripturl+"?"+params.join("&"),true);
   http.send();
   return true;
}
</script>

Notes —

In the JavaScript, replace /php/LogClick.php with the URI of LogClick.php. The URI is the URL minus the leading protocol and domain name. (As an example, URL https://example.com/php/file.php becomes /php/file.php when converted to a URI.)

Paste the JavaScript into a web page where one or more links are or will be click-count enabled. Alternatively, the JavaScript may be pulled into the page from an external file.

To enable a link for click counting, put this attributer into the HTML a tag:

onclick="return LinkClicked(this)"

Note —

Put that attribute into every HTML a tag where you want the link click/tap counted.

You are now ready to test your implementation.

Testing

To test, click or tap on a link to be tested. Then, see if the click is logged in the log file.

If no log entry is made or the log file is not created, it may be necessary to give 777 permissions to the directory where the CSV log file will be maintained.

You now have a system that logs the clicks or taps on certain links.

This article first appeared with an issue of the Possibilities newsletter.

Will Bontrager

Was this article helpful to you?
(anonymous form)

Support This Website

Some of our support is from people like you who see the value of all that's offered for FREE at this website.

"Yes, let me contribute."

Amount (USD):

Tap to Choose
Contribution
Method

All information in WillMaster Library articles is presented AS-IS.

We only suggest and recommend what we believe is of value. As remuneration for the time and research involved to provide quality links, we generally use affiliate links when we can. Whenever we link to something not our own, you should assume they are affiliate links or that we benefit in some way.

How Can We Help You? balloons
How Can We Help You?
bullet Custom Programming
bullet Ready-Made Software
bullet Technical Support
bullet Possibilities Newsletter
bullet Website "How-To" Info
bullet Useful Information List

© 1998-2001 William and Mari Bontrager
© 2001-2011 Bontrager Connection, LLC
© 2011-2024 Will Bontrager Software LLC