Single-page Logging
Knowing how many hits a specific Twitter or Facebook post garners can be valuable information when planning future campaigns. Number of hits from robots compared to number of hits from people is also nice to know.
Insert PHP plugin.
I'll show you how to implement two logs for individual pages – one log for real browsers and one for all hits, including robots. Robots that follow URLs in JavaScript would also be recorded in the "real browsers" log. But those should be few.
Compare the two logs to see how many robots loaded the page and, if the information is provided, the type of robot and its purpose.
The logs are CSV formatted.
This system works on non-WordPress pages and also on WordPress pages with the Insert PHP plugin.
The logs contain date and time, IP address, referrer information (if available), web page URL, and browser/robot user-agent information.
The logging script is written in PHP. It is installed separately, simply uploaded to a location with a URL.
Here is the logging script. Copy the code and save it as SinglePageLogging.php or other .php file name of your preference. (Customization notes follow.)
<?php /* Single-page Logging Version 1.0 November 19, 2012 Will Bontrager Software, LLC https://www.willmaster.com/ Copyright 2012 Will Bontrager Software, LLC This software is provided "AS IS," without any warranty of any kind, without even any implied warranty such as merchantability or fitness for a particular purpose. Will Bontrager Software, LLC grants you a royalty free license to use or modify this software provided this notice appears on all copies. */ // // Customization: // // Four places to customize. // // Place 1 -- // Location of log file directory. The directory must exist // and have permissions sufficient to create/update files. $LogFileDirectory = "/Log_Single_Page"; // Place 2 -- // "All hits" log file name. $LogFileNameAll = "log_all.txt"; // Place 3 -- // "Browsers only" log file name. $LogFileNameOnlyBrowsers = "log_browsers.txt"; // Place 4 -- // The URL of this file. $URLofThisFile = "http://example.com/SinglePageLogging.php"; // End of customization // ////////////////////////// $LogFileDirectory = preg_replace('!/*$!','',$LogFileDirectory); $LogFileDirectory = preg_replace('!^/$!','/',$LogFileDirectory); $AllFile = $_SERVER['DOCUMENT_ROOT'] . "$LogFileDirectory/$LogFileNameAll"; $BrowsersFile = $_SERVER['DOCUMENT_ROOT'] . "$LogFileDirectory/$LogFileNameOnlyBrowsers"; $Referrer = $_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : ''; $SelfURL = $_SERVER['PHP_SELF']; if( isset($_GET['JS']) ) { $Referrer = $_GET['JS']; $SelfURL = $_GET['ME']; } elseif( isset($_SERVER['QUERY_STRING']) and strlen($_SERVER['QUERY_STRING']) ) { $SelfURL .= '?' . urldecode($_SERVER['QUERY_STRING']); } $systime = time(); $LogLine = implode( ',', array($systime, MakeCSVfield(date('l, F j, Y \a\t G:i:s',$systime)), $_SERVER['REMOTE_ADDR'], MakeCSVfield($Referrer), MakeCSVfield($SelfURL), MakeCSVfield($_SERVER['HTTP_USER_AGENT'])) ); if( isset($_GET['JS']) ) { if( $f = fopen($BrowsersFile,'a') ) { fwrite($f,"$LogLine\n"); fclose($f); } } else { if( $f = fopen($AllFile,'a') ) { fwrite($f,"$LogLine\n"); fclose($f); } $cracked = preg_replace('!http!',"h'+'t'+'t'+'p",$URLofThisFile); $cracked = preg_replace('!//!',"/'+'/",$cracked); $crackedref = preg_replace('!http!',"h'+'t'+'t'+'p",$Referrer); $crackedref = preg_replace('!//!',"/'+'/",$crackedref); echo "<script type='text/javascript' src='$URLofThisFile?JS=$Referrer&ME=$SelfURL'></script>"; } function MakeCSVfield($s) { if( strpos($s,',') === false ) { return $s; } $s = str_replace('"','""',$s); return '"'.$s.'"'; } ?>
Customization:
-
$LogFileDirectory — Specify the location of the log file directory, in the document root directory (where the domain's home or index page file is located) or a subdirectory. The directory must exist and have permissions sufficient to create/update files. On some servers, permissions 777 is required. On others, 755 is sufficient.
-
$LogFileNameAll — Specify an "all hits" log file name. This is where all pages loads will be recorded, both browsers and robots.
-
$LogFileNameOnlyBrowsers — Specify a "browsers only" log file name. This is where page loads by browsers will be recorded. Robots will be excluded unless they follow URLs in JavaScript.
-
$URLofThisFile — Specify the URL of the logging script, the one you are customizing.
Installation:
-
Ensure the directory specified in customization step 1, above, exists and has sufficient permissions. On some servers, permissions 777 is required. On others, 755 is sufficient.
-
Upload the logging script to the location specified at the customization step 4, above.
The logging script has now been installed.
Test it by copying and pasting the URL specified in customization step 4 into your browser. When the URL is loaded in the browser, two files should be created in the directory specified in customization step 1, the file names specified in steps 2 and 3.
Setting Up Single-page Logging
After the logging script has been installed and tested, it is relatively easy to enable a page for logging.
Non-WordPress page.
Put this code anywhere in the web page to be logged.
<?php include($_SERVER['DOCUMENT_ROOT'] . "/SinglePageLogging.php"); ?>
Replace "/SinglePageLogging.php" with the location of the logging script on your server.
WordPress post or page.
Ensure the Insert PHP plugin has been installed and activated.
Put this code anywhere in the post or page to be logged.
[insert_php] include($_SERVER['DOCUMENT_ROOT'] . "/SinglePageLogging.php"); [/insert_php]
Replace "/SinglePageLogging.php" with the location of the logging script on your server.
As you can see, once the logging script is installed, setting up a page for logging is easy. Set it up before posting on Facebook or Twitter and see how many robots and browsers visit your page.
Will Bontrager