Browsing Category

Tracking & Analytics

Tracking & Analytics

Integrating Google Ads Lead Form With CRMs

Google has announced the rollout of Lead Form Extensions that enable advertisers to capture form submissions directly from the ad without sending users to a landing page, the submissions will be stored in Google Ads' database and will be downloadable as a CSV file, there is also an option to integrate with CRMs using a webhook, this howGoogle explained the integration:

A webhook is an API that enables you to send lead data to your CRM system in real-time. To set it up, you will need to add a webhook URL and key to your lead form extension. You may need to do some configuration within your CRM system to generate the URL and key.

The URL is the delivery path: after the user submits a lead form, an HTTP POST request is sent to the configured URL, allowing the lead data to go directly into the CRM system. The key is used for validating the leads sent.

The explanation above is confusing for marketers and at least unclear for developers. What is the webhook URL and where to find it? This program (Google ads lead form extension) is in Beta now, and I am not sure if there is any CRM that supports it at the moment, even Salesforce doesn't have a webhook URL for it yet.

How to generate a webhook for the lead form extensions?

The best resource that can help with that is the developer guide provided by Google, anytime the form is submitted to Google a JSON POST request will be sent to the webhook URL added in the form lead extensions, something like below:

{
"lead_id": "lead_id1",
"form_id" : "form_id1",
"user_column_data":[ {"column_name":"Full Name","string_value":"John Doe"},
{"column_name":"User Phone", "string_value":"12345678"},
{"column_name":"User Email", "string_value":"abc@123.com"}],
"api_version":"1.0",
"google_key" : "secret"
}

Firs you need to decide what is the best way to capture this data, for me I am going to use PHP to do that, my webhook could be something like this https://www.wisamabdulaziz.com/webhook.php  with the code below:

$json = file_get_contents('php://input');
$form_data = json_decode($json);
$leadid = $form_data->lead_id ;
$form_id = $form_data->form_id ;
$fullname = $form_data->user_column_data[0]->string_value;
$phone = $form_data->user_column_data[1]->string_value;
$email = $form_data->user_column_data[2]->string_value;

At this point all the values are available in the code and ready to be pushed to any CRM or a local database, most popular CRMs like SalesForce and Hubspot have APIs with PHP libraries (they have also libraries available for the most popular programming languages) making it easy to push the data to those CRMs.

Additional values like campaign and keyword could be available also in the fields and worth saving. Before pushing any values to your CRM make sure to create fields to match all the values you will be saving.

 

SEO Tracking & Analytics

How to Diagnose Organic Traffic Loss

Traffic loss is one of the most popular issues that can face SEO specialists, traffic can not go up forever and each website at some point will face a traffic loss situation that needs to be diagnosed. To help you to diagnose a traffic loss situation I will take you first thorough the most popular reasons to lose organic traffic, understanding those reasons and learning how to monitor them will make diagnosing traffic loss an easier task.

Most popular reasons to lose traffic:

1- Ranking loss:

Position #1 in the SERP can enjoy 30% or more click through rate, after that CTR will go down for every lower position in the SERP, position #10 can get 5% CTR or less. If a website losses ranking for highly searched keywords, the overall organic traffic will go down.

The most popular reasons for ranking loss are:

  • Algorithm updates (search engines like Google runs multiple updates every year).
  • Losing authority (e.g. Losing a lot of quality inbound links) or slow link growth.
  • Losing popularity (e.g. Less social signals and lower branded searches).
  • Website stagnation (no new content or no content refreshment).
  • CMS change or content change (e.g. website redesign which can include CMS change, URL change and content change).
  • Increase in competition, competitors could be providing better content and promoting their website more, so they get higher ranking.
  • Technical issues with search engines like crawlability, indexability, downtime, slow loading and manual actions.

2- SERP layout Change:

Google keeps changing the SERP layout, putting more ads at the top sometimes or featured snippets which can affect CTR while keeping the same ranking.

In the example above even a website ranks #1 it will be still below the fold, which can bring CTR significantly down, so we are not going to enjoy 30% CTR being number one anymore, we could be receiving 10% CTR only with the new layout.

3- Trending change and user behaviour:

Human needs and behaviours change throughout the years. Products and brands get disrupted sometimes and that can change search volume. A product like mini DVD has been disrupted by smart phones and tablets, what brought the search volume for it close to zero:

Another example could be online dating, the need for dating did not decline nor the need for online dating, but social media websites like Facebook are becoming a go-to destination for people that are looking for dating, which brought down the interest for the keyword online dating:

Step by step traffic loss audit:

Now that you know the most popular reasons to lose traffic, it is time to run some analysis on key metrics that can help us to evaluate a website against each traffic loss reason.

1- Identify which keywords are losing traffic using GSC:

Any traffic loss will be linked eventually to ranking and search volume for the keywords that are driving organic traffic, when a website is losing organic traffic the direct reason for that is either some keywords are getting less traffic or less keywords getting traffic, so the main focus of any traffic loss audit should be identifying which keywords are losing traffic, thankfully this analysis is made easier with GSC, just use the comparison feature and choose the too time spans that you want to analyse for traffic loss and identify which keywords are causing that loss:

Once you identify the keywords you need to assess what is causing them to lose traffic by running them against the reasons of losing ranking explained above.

2- Check the brand name in Google trends to make sure that the brand is not losing any popularity.

Run the checking for the last 5 years in the target audience country.

3- Link profile analysis:

Check the domain using Majestic SEO or Ahrefs to see if there is any recent link loss, the screen shot below is taken from Majestic:

Link loss will lead to lower authority which in most cases will cause ranking loss.

4- Check index growth in Google Search Console:

This will help to identify any deindexation issue:

Losing more indexed pages means losing ranking for any keywords those pages are ranking for. Deindexation could be a result of:

  • Technical errors in the website (e.g. server errors or very slow load time).
  • Duplicate or thin content.
  • Issues with setting up the canonical tags.
  • Algorithm update that affect crawling standards.
  • Losing authority (e.g. the link profile is getting weaker).

Summary:

Organic traffic loss can happen to any website, diagnosing the situation and finding the reasons behind it is not quick nor easy in most cases, sometimes you get lucky to find out that a technical issue on the site caused it, the webmaster can fix it quickly and things will go back to normal in few weeks, but for most other cases recovering may not be even possible or can take a very long time. The key thing when it comes to traffic loss is finding about early and start reacting to it immediately.

 

 

Tracking & Analytics

How To Build Your Own Call Tracking System Using Twilio

This post is an extension to the previous post I did explaining how to connect Twilio to Google Sheets and Google Data Studio , the missing part in that post was how to designate different phone numbers to different mediums or sources of a website traffic, and this is what I will be covering in this post.

Step 1:

Decide what mediums or sources you want to track, the most basic tracking if you have a low budget is tracking three mediums: organic, paid and others, a more advanced tracking will be:

  • Organic Google
  • Organic Bing
  • Paid Google
  • Paid Bing
  • Referral
  • Direct

You can also consider tracking email campaigns and offline campaigns like radio. Obviously the more mediums/sources you want to track the more phone numbers you need.

Step 2:

Assuming you are going after a basic tracking (organic, paid and others) you need to buy three phone numbers, I will assume they are:

  • 111-111-1111 for organic traffic
  • 222-222-2222 for paid traffic
  • 333-333-3333 for others

Make sure to redirect those numbers to your own phone number, I will call that the default phone number and it is 000-000-0000

Step 3:

We need to save the source, medium and term for every website visitor in a cookie, you can do that using UTMZ-replicator  just add it to your website using Google Tag Manger as a custom HTML tag and let it fire on every pageview.

GTM-UTMZ

Step 4:

Make sure the phone number on your website is contained in a unique class, something like below:

<a class="default-phone-number" href="tel:000-000-0000">000-000-0000</a>

Step 5:

Add the JavaScript code below as a tag in Google Tag Manager and let if fire after the UTMZ tag in step 3:

....
var findnum = [
{ "number": "111-111-1111", "medium": "organic" },
{ "number": "222-222-2222", "medium": "cpc" },
{ "number": "333-333-3333", "medium": "others" }
];
function searchMD(findnum, medium){
for(var i= 0, L= findnum.length; i<L; i++){ if(findnum[i].medium=== medium) return findnum[i].number; } return ''; } var ga_source = ''; var ga_campaign = ''; var ga_medium = ''; var ga_term = ''; var ga_content = ''; var gc = ''; var c_name = "__utmzz"; if (document.cookie.length>0){
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1){
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
gc = unescape(document.cookie.substring(c_start,c_end));
}
}
if(gc != ""){
var y = gc.split('|');
for(i=0; i<y.length; i++){ if(y[i].indexOf('utmcsr=') >= 0) ga_source = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmccn=') >= 0) ga_campaign = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmcmd=') >= 0) ga_medium = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmctr=') >= 0) ga_term = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmcct=') >= 0) ga_content = y[i].substring(y[i].indexOf('=')+1);
}
}
if (!((ga_medium =="organic") || (ga_medium =="cpc"))) ga_medium = "others" ;
document.getElementsByClassName('default-phone-number')[0].innerHTML= searchMD (findnum,ga_medium);
document.getElementsByClassName('default-phone-number')[0].href= "tel:"+searchMD (findnum,ga_medium);
...

gtm_utmz

At this point you can be sure that phone number will fire only based on their correspondent medium, at this point you can start building your dashboard following the post here

Tracking & Analytics

Connect Twilio to Google Sheets and Google Data Studio

Call tracking is a vital service for any marketer, and when it comes to call tracking, Twilio is the largest telephony infra structure provider in the market that can help a lot with that; however, Twilio is geared more towards developers, nontechnical users can not do much using Twilio and they have to go for a plug and pay services like, Dialogue Tech and Call rail.

In this post I will provide Twilio's nontechnical users with a solution to create a friendly dashboard using Google Sheets, which could be eventually used with Google Data Studio for better visualization.

Step 1:

Make sure you have a Twilio account with at least one active phone number that redirects to your own phone number, Twilio has a nice guide here that explains how to find and buy a phone number, after buying the phone number you can use Twilio's built in web-hook to redirect it to your own phone number (see below)

twilio-forward

Just add your phone number to the end of the web-hook's URL: http://twimlets.com/forward?PhoneNumber=111-111-1111

You can buy multiple phone numbers and use each of them to track a different medium, like organic, paid, and others. In this tutorial  you can find how to rotate phone numbers based on incoming traffic to your website, if you are using the the numbers on dedicated landing pages or other mediums like off-line, number's rotation will not be required as each number will be served only for one medium.

Step 2:

Find your Twilio's API credentials by clicking the gear icon at the top >> settings >> copy ACCOUNT SID and AUTH TOKEN

twilio-token

Step 3:

Replace your ACCOUNT SID and AUTH TOKEN in the code below that we will be using in Google Sheets:

function myFunction() {
var ACCOUNT_SID = "*********************************";
var ACCOUNT_TOKEN = "*********************************";
var findmedium = [
{ "number": "+1**********", "medium": "organic" },
{ "number": "+1**********", "medium": "cpc" },
{ "number": "+1**********", "medium": "others" }
];
// you do not need to edit anything below this line
function searchMD(findmedium, num){
for(var i= 0, L= findmedium.length; i<L; i++){
if(findmedium[i].number=== num) return findmedium[i].medium;
}
return '';
}
var numberToRetrieve = 10;
var hoursOffset = 0;
var options = {
"method" : "get"
};
options.headers = {
"Authorization" : "Basic " + Utilities.base64Encode(ACCOUNT_SID + ":" + ACCOUNT_TOKEN)
};

var url="https://api.twilio.com/2010-04-01/Accounts/" + ACCOUNT_SID + "/Calls.json?PageSize=" + numberToRetrieve;
var response = UrlFetchApp.fetch(url,options);

var theSheet = SpreadsheetApp.getActiveSheet();

function search(xyz) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for(var i=2;i<12;i++){
var value = sheet.getRange(i, 6).getValue();
if(value == xyz){
var match = 1 ;
}
}
return match ;
}
var startColumn = 1;
var theRow = 2 ;
var dataAll = JSON.parse(response.getContentText());
for (i = dataAll.calls.length -1 ; i >= 0 ; i--) {
var found = search (dataAll.calls[i].sid) ;
var calldirection = dataAll.calls[i].direction ;
var midnight = new Date();
midnight.setHours(0, 0, 0, 0);
rowDate = dataAll.calls[i].date_created;
var theDate = new Date (rowDate);
theDate.setHours(theDate.getHours()+hoursOffset);
if (!found && calldirection == "inbound") {
theSheet.insertRowAfter(1);

theColumn = startColumn;

if(isNaN(theDate.valueOf())) {
theDate = 'Not a valid date-time';
theColumn++;
}
else {
theDate.setHours(theDate.getHours()+hoursOffset);
theSheet.getRange(theRow, theColumn).setValue(theDate);
theColumn++;
}

var callduration = dataAll.calls[i].duration/60 ;
callduration = +callduration.toFixed(2);

theSheet.getRange(theRow, theColumn).setValue(dataAll.calls[i].to);
theColumn++;
theSheet.getRange(theRow, theColumn).setValue(dataAll.calls[i].from);
theColumn++;
theSheet.getRange(theRow, theColumn).setValue(callduration);
theColumn++;
theSheet.getRange(theRow, theColumn).setValue(searchMD(findmedium, dataAll.calls[i].to)); //tw searchMD(findmedium, dataAll.calls[i].to) ;
theColumn++;
theSheet.getRange(theRow, theColumn).setValue(dataAll.calls[i].sid);
}
}
}

If you are using multiple phone numbers for different mediums replace the values in the findmedium array, otherwise just leave the code as is.

Step 4:

Create a new sheet in Google Sheets and name the first 6 columns in the top row as below (feel free to change the names to any other names keeping the same order)

twilio-sheet

Step 5:

In Google Sheet go tools >> script editor >> delete any existing codes and replace them with the codes from step 3

sheets-script

Step 6:

In Google Sheets script editor click on the clock icon to create a trigger >> Click + Add  Trigger (bottom right corner) >> Time-driven >> Hour timer >> Every hour >> save

trigger

Once you do that, in few hours the data will start to show up in your sheet as below:

sheet-data

Having the call date in Excel will give you a lot of flexibility to manipulate and extract data, for more visualization read step 7 which will explain how to create a simple report in Google Data Studio.

Step 7:

Connect the sheet you created to Google Data Studio by going blank report >> Create data source >> Create new data source >> Google Sheets >> Choose the spread sheet created in step 4 >> Click connect

Google-data-studio-source

You should be able to see an empty Google Data Studio report with a grid, now Insert >> Time series >> Add to report

If everything works fine you should be able to see a report like below (a daily total calls duration report) :

GDS

There is a lot you can do to customize this report but I am not going to go through all of that, watch this video here to learn more.

Finally I want to say that this post was inspired by a great post provided by Twilio How to Receive SMS Messages into Google Sheets with Apps Script and Twilio and part of code was used in my post.

Please feel free to comment if you have any questions.

Tracking & Analytics

How to Pass Google Analytics Traffic Source Dimensions To Salesforce

Would not be great if marketers can see Google Analytics traffic source dimensions in Salesforce? Unfortunately Salesforce by default doesn't provide any attributions for web leads pushed to Salesforce, I am not sure why considering that is not difficult to do that for a lead that is pushed using web-to-lead form where a simple additional code can push the lead source dimensions like source/medium and more other dimensions that marketers badly need to calculate ROI. This guide will provide a step-by-step method explaining how to push the lead source dimensions mainly  source, medium and keyword (if available) to Salesforce, I will be using the same terminology used by Google Analytics to keep things consistent for marketers.

Step 1:

We need first to create few extra fields in Salesforce to save the lead source dimensions, in sales force go Salesforce > Set up >  Object Manager > Lead > Fields & Relationships > New > Text

new-field

We need to repeat the process above few times depending on the number of diminutions we are willing to push to Salesforcee, in my case I have created three dimensions Medium, Source and Term (keyword).

fields

It is recommended to choose a long text area field for the Source as some URLs can get really long .

Step 2:

Now we have the fields ready in Salesforce, we need to create a Web-to-Lead form which you can access through Salesforce > Setup > Web-to-lead > Create Web-to-Lead Form   (make sure to add Source, Medium and Term to the form).

web-to-lead-1

Generate the form then hide the Source, Medium and Term fields, you need also to clean up the extra text related to those 3 fields.

form1

Step 3:

We need to save the Source, Medium and Term for every website visitor in a cookie, you can do that using UTMZ-replicator  just add it to your website using Google Tag Manger as a custom HTML tag and let it fire on every pageview.

GTM-UTMZ

Once this script is added you will be able to see Source, Medium and Term saved in a cookie called __utmzz

utmz-cookie

Step 4:

Source, Medium and Term are saved in a cookie now it is time to take their values and populate them to the corresponding hidden fields in Salesforce's web-to- lead form, to do that you just need to create a tag in Google Tag Manger (custom HTML tag) and insert the code below (the cookie reading part of this code is taken from Stackoverflow with some modifications)

<script type="text/javascript">
var ga_source = '';
var ga_campaign = '';
var ga_medium = '';
var ga_term = '';
var ga_content = '';
var gc = '';
var c_name = "__utmzz";
if (document.cookie.length>0){
c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1){
c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length;
gc = unescape(document.cookie.substring(c_start,c_end));
}
}
if(gc != ""){
var y = gc.split('|');
for(i=0; i<y.length; i++){
if(y[i].indexOf('utmcsr=') >= 0) ga_source = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmccn=') >= 0) ga_campaign = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmcmd=') >= 0) ga_medium = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmctr=') >= 0) ga_term = y[i].substring(y[i].indexOf('=')+1);
if(y[i].indexOf('utmcct=') >= 0) ga_content = y[i].substring(y[i].indexOf('=')+1);
}
}
document.getElementById('00N3i00000BG1jK').value= ga_source;
document.getElementById('00N3i00000BG1hp').value= ga_medium;
document.getElementById('00N3i00000BG1lf').value= ga_term;
</script>

You can see that the code above includes also campaign which I did add to Salesforce but you can easily add it following the process provided early in this guide. After publishing the code above and submitting a form lead you should be able to see the lead source dimensions (Source, Medium and Keyword) in Salesforce lead page.

utm-salesforce

Please feel free to comment below if you have any questions

Tracking & Analytics

Salesforce Integration With Google Analytics - Step by Step

Salesforce is probably the most popular cloud based CRM in the market but unfortunately it is lacking the ability to integrate well with web tracking systems like Google analytics (at least the free version) to provide a full view of the user journey from A-Z (web lead to sale).

On the other hand Google Analytics (the most popular website traffic software) gets very close to provide the full user journey but as Google Analytics is not a CRM it is missing conversion tracking data (mainly leads tracking), a lead could be tracked easily in GA by tracking the lead  form thank you page but once this lead is pushed to a third party CRM like Salesforce GA can not get any information when and if that lead is closed. Google Analytics 360 has the ability to integrate with Saelsforce and closing the loop on conversion tracking but unfortunately GA 360 cost is around $150,000/year

In this step by step tutorial I will show you have you can integrate GA (the free version) with Salesforce and get the conversion tracking data, before start doing that I want you to understand my working environment and to be aware that it may not work 100% for you but with some modifications you can get this solution to work with any environment, :

  • The CMS I am testing this work on is WordPress, it is PHP based so all my codes will be in PHP
  • I am using Google Tag Manager to implement some JavaScript codes
  • I am using Salesforce' PHP simple implementation to interact with the Salesforce REST API from PHP
  • I am using the 30 days free Salesforce trial

Stage 1 - push Google Analytics CID to Salesforce:

Client ID (CID) is a unique user identifier created by Google Analytics and stored in a browser's cookie for two years, the number could be seen in GA's user explorer and also could be found in the browsers cookie

CID

All subsequent activities by the same user using the same browser will be listed under that CID and treated as one user's activities

GA-user-explorer

Step 1

Before even trying to push CID to Salesforce we need to create a new lead field in Salesforce by going to Salesforce > Set up >  Object Manager > Lead > Fields & Relationships > New

salesforce-new-field

Keep the field name CID__c handy as we will need it when we communicate with Salesforce using the API

Step 2:

Now we have the CID field ready in Salesforce, filling that field could be done in different ways, in my case I will be using the Web-to-Lead form which you can access through Salesforce > Setup > Web-to-lead > Create Web-to-Lead Form  and generate a source code that you can use on your website

web-to-lead

The form will be used in the contact us or lead generation page, before placing the form make sure you make the CID field hidden from users as it will be filled automatically using JavaScript. See an example of the Webto-Lead form with the CID field hidden:

Step 3:

Now we need to inject the CID value inside the hidden field, this could be done by reading the GA cookie via JavaScript (not recommended by Google) or by using native Google Analytics calls. I will be using native Google Analytics calls and include them using Google Tag Manger, the tag below will be able to find the CID and inject it in the hidden CID field (make sure to set up the right firing sequence as below)

GTM-tag-CID

By now the form is fully communicating with Salesforce and passing the CID, you can make a test and you will see the CID showing in Salesfoce's dashboard

Stage 2 - push a pageview back Google Analytics from Salesforce with the same CID once the lead is closed:

For this stage we need to communicate with Salesforce using their API, we need to build a system that can check the leads status every 5-10 minutes and if any new lead is becoming closed we need to push a pageview back to Google analytics using the measurement protocol

Step 4:

Create an APP in Salesforce to enable the API connection Salesforce > Set up >  > Apps > App Manager > New Connected APP >> Save >> Continue

salesforce-App-CID

Save the consumer key and consumer secret from the next screen to use them in the API SDK

oauth

Edit the App permissions Salesforce > Set up >  > Apps > App Manager > Manage Connected APP >> Edit >> Save

OAuth-policies

You do not have to use exactly those settings, I just tried to keep the policies very lose to make building my first App easier

Step 5:

Download the developer SDK for your preferred programming language, in my case I will be coding in PHP so I can use the PHP developer SDK for Salesforce or  the simple implementation example here which I ended up using just to keep things simple for this tutorial. When using the simple implementation example here (or any other framework ) make sure to rename the call back file to match the call back URL in step 4 and edit the config.php file and add the credentials you got from step 4:

client_id

Visit the index.html file which will redirect you to login to your Salesforce account and after that you will be brought back automatically to the file demo_rest.php now you will have 15 minutes to test anything you want, once you are happy with the results you need to use the refresh token which you can get in the callback file using this code:

$refresh_token = $response['refresh_token'];

Step 6:

After establishing a successful connection using the API you need to write a call that list all or part of the leads:

list-leads

The output of the file will be as below:

leads-output

As you can see we have now a list of the leads with their CID and their status, what we will be processing in the next step are leads that contain CID and the are Closed - Converted

Step 7:

Create a new goal in Google Analytics with a destination URL like this /thank-you-page.html  or any other URL of your choice that is not used by any other goal, create also a page with no content for that URL.

Use Google Analytics Hit Builder to build a call that add a pageview for /thank-you-page.html

hit-builder

You can click send a hit to Google analytics to test the URL but eventually this URL must be part of your script (a cronjob) that will:

  • Scan Salesforce's leads using the API every few minutes or every hour
  • Find closed leads
  • Push a pageview hit to Google Analytics using the lead CID
  • Store that lead in an internal database that will be checked in the future to avoid saving duplicate leads

If the lead with right CID is pushed correctly to Google Analytics as a pageview, you should be able to see that pageview and a registered goal using the users' explorer

salesforce-GA

You can see how the medium organic search was inherited automatically using the existing CID without including that in the hit builder URL, at this point we have closed the loop on finding actual conversions that happen in Salesforce but missing in GA, the user flow could be checked in GA uninterrupted without any additional actions by GA users.

 

Good luck implementing that solution, please comment below if you a have a question

 

 

Tracking & Analytics

Tracking and Analytics

"If you can not measure it, you can not improve it" results measurement is vital in any marketing campaign, luckily when it comes to online marketing there is almost nothing that could not be measured. There are many metrics that SEOs need to keep eye on for different reasons:

  • They are ranking factors (e.g. website speed)
  • They are success signals (e.g. more organic traffic)
  • They are alarming signals that need to be investigated (e.g. ranking with Google is declining or GSC sending error notifications)
  • They present opportunities (e.g. keywords that rank on the second page can easily make their way to the second page with some optimization)

There are a lot of SEO KPIs to track, so before starting any project you need to sit with the project's stakeholders and discuss what KPIs need to be tracked, have not said that there are many standard (universal) SEO KPIs that most SEOs track that I will focus on in the next section.

Organic traffic tracking metrics:

The metrics below could be tracked using Google Analytics (GA), Google Search Console (GSC) and Google My Business. Please note that GSC and GMB do not save a long history of data so you need to make sure you have a solution that keep the data stored permanently

  • Number of organic landing pages (GA)
  • Head (top) keywords ranking (GSC or third party tools)
  • Average position/ranking for all keywords (GSC)
  • Number of indexed pages (GSC)
  • Pages with errors (GSC and GA)
  • CTR (click through rate) (GSC)
  • Bounce rate (GA)
  • Time on site (GA)
  • Pages per session (GA)
  • Number of keywords ranking on the first page (GSC with some processing)
  • Pages that attract zero traffic (GSC + site crawling data)
  • Pages and keywords that are losing traffic  (GSC)
  • Google My Business GMB, impressions, directions, phone calls and clicks (GMB)

It is very important to understand the average values of the metrics above for your industry and set objectives/forecasts for every new project with a clear plan to achieve those forecasts

Website performance, UX,  CRO and ROI

There are a lot of metrics to create and track that can help with UX and CRO

For UX many of them are mentioned above:

  • Bounce rate
  • Time on site
  • Number of pages per session
  • SERP CTR
  • Event tracking (e.g. video play duration and links clicking)

For CRO:

  • Goal tracking (e.g. tracking form submissions)
  • Ecommerce tracking for websites that sell online products
  • Connecting CRMs to Google analytics to track sales (e.g. connect SalesForce to Google Analytics)
  • Audiences building and tracking
  • Phone calls tracking by medium/source
  • Clickable phone number event tracking (this is for mobile users that click to call on a phone number)

It is very important to report on the financial success of the SEO campaign, one way to do that is ROI (return on investment) which is simply  ((Monthly Earnings - Monthly SEO retainer)/Monthly SEO retainer) X 100 some people go with revenue instead of earning. While doing this you need to consider the customer life time value, for a client that offers web hosting  where customers rent servers and keep them almost for life the monthly earning or revenue will not reflect the actual value of this customer, if they are selling $200/month dedicated servers with 30% profit then the earning of one sale should be 0.3 X 200 X (customer average lifespan let us say 36 months) = $2160 .. so if you are paid $1080/month for your SEO services and you are able to generate one sale for this client the ROI of the SEO services will be 100% in this case

Another way to justify ROI if you do not have access to the client financial data is going by the click value, if you have a personal injury lawyer client where a click using Google Search Ads can cost a $100 or more for some keywords, being able to drive 50 clicks/month from relevant keywords can justify an SEO spend of $2000 or more

Competition analysis:

Picking the right tools to do competition analysis is key to come up with any meaningful insights, in order to keep it apple to apple you can not use GSC to measure your own traffic then use SEMrush to measure competitors traffic, just use the same tool for everyone.

We are very lucky to live in an era where tools like SEMrush and Ahrefs are available to provide very useful link graph and traffic data for almost any website on the web, the key metrics to track while doing competition analysis are:

  • Referring domains
  • Inbound links
  • Organic traffic
  • Ranking for highly searched keywords
  • Number of keywords on the first page
  • Number of indexed pages

All of them are available using SEMrush with an exception of number of indexed pages which you can use Google site:domain.com modifier to track them

The most popular tools used by SEOs for tracking key metrics:

  • GMB (Google My Business)
  • GSC (Google Search Console)
  • GA (Google Analytics)
  • GTM (Google Tag Manager)
  • SEMrush
  • Ahrefs
  • Google Data Studio

Offering tracking services:

With tools like GA and GTM tracking is becoming a service on it own that SEOs can provide to their clients, here are few areas where clients need help:

  • GA optimization, Google recommends creating multiple views in each property, each property needs it is own filters and goals
  • Mapping events and goals: After a long time using the same view and many parties adding their own filters, goals, audiences and customization there will be a need for someone to come and map all of this and do some clean up
  • Many clients end up with 100s of tags and triggers in their GTM where it becomes very difficult to navigate and understand so it needs some mapping and clean up
  • Self submission forms and complex events tracking need GTM and GA experts to implement them
  • Ecommerce tracking is normally difficult for many webmasters to implement on their own unless it is natively supported by the shopping cart software (e.g. Shopify)
  • Creating GA and GDS custom dashboards

Gaining advanced knowledge in GA, GSC and GTM is vital for your SEO career, make sure you check the available certificates here that can help you to gain and validate the tracking knowledge you need to support your SEO career

Technical SEO Tracking & Analytics

Daily Reading to Stay up-to-date With the SEO Industry Changes

SEO is a very dynamic industry that changes almost on a daily basis, there is something new every day to read about or to learn about. It is strongly recommended to read, watch videos or listen to podcasts for an hour or more every day to stay at the top of all changes relate to SEO in specific and internet marketing in general. I will list below the websites (mostly blogs) that I check on a daily basis for news and updates, the links below will take you directly to their RSS feed page so you can add it to any reader of your choice (I personally use Feeder.co which has a Google Chrome Plugin, Phone APP and a web based interface), recently both Firefox and Chrome browsers added a built in RSS reading feature.

This is how Feeder.co will look like in my Google Chrome, the number in the blue box represents the number of the unread posts from the websites I subscribed to

The website in my subscription list are:

  1. SEO Round Table
  2. Search Engine Land
  3. Search Engine Journal
  4. MOZ Blog
  5. Search Engine Watch
  6. Ahrefs Blog
  7. SEMrush Blog
  8. PPC Hero
  9. Distilled
  10. Webmaster World
  11. Bright Local
  12. Google Ads
  13. Google Analytics
  14. Simo Ahava
  15. WebKit  (the technology behind Safari browser)
  16. Chromium Blog
  17. The Mozilla Blog

 

 

Technical SEO Tracking & Analytics Uncategorized UX and CRO

Best Tools to Evaluate Website Speed

When it comes to measuring website speed I recommend:

1- Testing the home page + few other key pages from the website

2- Test in different times of the days and different days of the week

3- Test using more than one tool (two at least)

Web Page Test:

Available form multiple locations, multiple devices and using different internet speed, provides speed index (the time required for the site to visually load for users even if there is still process going in the background of the website)

This tool provides insights how to speed up the website, a report, and a video showing the load progress.

Google Speed Insight:

The tool has become more valuable after adding Light House data and Google Chrome data (not available for every website), be aware that score is not speed, speed is measured by seconds only, seeing very low score does matter a lot of your web page speed is 3 seconds or less

This tool provides insights how to speed up the website, a report, a video showing the load progress and industry comparison.

GTmetrix

Available form multiple locations, multiple devices and using different internet speed, this tool can track speed history (paid feature) which is a handy feature to evaluate the website speed though out the whole day or the whole week

This tool provides insights how to speed up the website, a report, a video showing the load progress

Test my Site By Google

This tool is designed to analyze speed on mobile websites with low speed connection (3G), it provides insights how to speed up the website, a report and industry comparison

Google Developer Tools (Advanced)

This is a built in extension with Google Chrome, it has the ability to change connection speed, device, disable/enable cache.

 

Google Analytics (the numbers there are not very reliable)

GA provides average page load time in seconds, I did it find it that reliable, possibility because it averages number from different users and it works based on the code load completion which is not always a reflection of the actuation page load

Technical SEO Tracking & Analytics

Enhance Your SEO Resume with Those Internet Marketing Certificates

In this post I am going to include what certifications can help you to land your next SEO job (I will add another post for some training courses), most of the certificates below have online training sections that you need to go through before taking the exam, if you pass the exam you will be granted a digital certificate that you can print and hang in you office, you will also get a web page that you can add to your Linkedin profile. With the education system falling behind when it comes to digital marketing the certificates below will give you an instant advantage with any poetical employer.

Google Analytics Academy

  • Google Analytics for Beginners
  • Advanced Google Analytics
  • Google Analytics for Power Users
  • Getting Started With Google Analytics 360
  • Introduction to Data Studio
  • Google Tag Manager Fundamentals

Google Mobile Sites certification

Google Partners

  • Google Ads Display Certification
  • Google Ads Mobile Certification
  • Google Ads Search Certification
  • Google Ads Video Certification
  • Google Shopping Certification
  • Digital Sales Certification
  • Google Ads Fundamentals

Facebook Core Competencies Exam

Facebook Planning Exam

SEMrush course SEMrush Academy

Hubspot inbound certification

MOZ Academy  (the essential SEO certificate is a good start)

If you are asking why do I need paid search or marketing automation certificates if I will be applying to a SEO job? SEO for most companies is one piece of the whole marketing landscape that includes in most cases, social media marketing, PPC, SEO and marketing automation. SEO specialists will be working closely with other digital marketing channels and they need at least a basic understanding of how those other channels work. The other benefit of having PPC certificates is that smaller companies tend to hire one in-house marketing individual to manage all their digital marketing channels, being at familiar with the PPC channels will increase the number of jobs you can apply to.

SEO certificates are not must to gain SEO knowledge, all the information your need to learn SEO is available online however they can help you with three things:

  • As the education system is not caching up yet they will give you some credibility and increase your chances to land an SEO job
  • They will streamline your learning curve and test your knowledge
  • They will increase you commitment level to learn SEO and chase it as a career especially if you pay for some of those courses