Showing posts with label Adwords. Show all posts
Showing posts with label Adwords. Show all posts

Wednesday 4 February 2015

Google Study: PPC and SEO for Branded KWs is better than Just SEO

It used to confuse me before, why would I add my brand keywords or keywords that I am already on top of SERPs for in my PPC campaign? I was thinking that people are going to click on my links automatically because they are already on top.
But I still ran the camapigns with those KWs, just to prevent competitors taking them.
Then I found an inetresting study to justify the paid clicks on branded and organically ranked KWs:

The study which was conducted by Google concluded that 50 percent of clicks generated by paid ads are not replaced by organic clicks when the ads are absent and the website has a first position organic search ranking. The study also shows that as the organic search ranking decreases, the percentage of clicks not replaced by the paid ad increases. This implies that organic search alone cannot drive as much traffic to a website as organic search combined with paid search.
Here is the Abstract:

Impact Of Ranking Of Organic Search Results On The Incrementality Of Search Ads

Abstract: In an earlier study, we reported that on average 89% of the visits to the advertiser’s site from search ad clicks were incremental. In this research, we examine how the ranking of an advertiser’s organic listings on the search results page affects the incrementality of ad clicks expressed through Incremental Ad Clicks (IAC) and as estimated by Search Ads Pause models. A meta-analysis of 390 Search Ads Pause studies highlights the limited opportunity for clicks from organic search results to substitute for ad clicks when the ads are turned off. On average, 81% of ad impressions and 66% of ad clicks occur in the absence of an associated organic search result. We find that having an associated organic search result in rank one does not necessarily mean a low IAC. On average, 50% of the ad clicks that occur with a top rank organic result are incremental, compared to 100% of the ad clicks being incremental in the absence of an associated organic result.


Impact Of Ranking Of Organic Search Results On The Incrementality Of Search Ads

Wednesday 7 January 2015

AdWords Scripts Tools and Basics

You do not have to be a programmer to run AdWords Scripts, especially when you manage large E-commerce sites.

I know it is intimidating for many PPC Specialists to deal with code, but when you know the great things you can do with these ready-made scripts and how to implement them as easily as setting up an Ad Group, you will regret not knowing how to do it a long time ago.

First, what can you use the Adwords Scripts for:
There are many things you can use the Scripts for, but the most important are:
  1. Finding broken links in destination URLs
  2. Disabling Ads or Keywords for out of stock items. 
  3. importing data from other CRM tools
  4. Import data from a spreadsheet to make decisions on your AdWords account
  5. Use external inventory data to pause/unpause entities.
  6. As inventory becomes high, you can increase bids or add new keywords.
  7. Automatically take actions against keywords hogging your spend for the day.
  8. Pause the keyword and increase budget at the same time.
  9. Create campaign stats reports and visualizations.
Adwords Scripts infographic what to use it for PPCHero


Adwords Developers page has provided all the needed tools and material you will need in order to run your Scripts. You can find them all here: https://developers.google.com/adwords/scripts/docs/solutions/

Russel Savage has created a nice tutorial that explains the lines you will find in most Scripts:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*********************************
* Intro to Javascript For AdWords Scripts
* Version 1.0
* Created By: Russ Savage
* FreeAdWordsScripts.com
*********************************/
function main() {
  // This is a comment. AdWords Scripts ignores this
  /* Here is another way to comment
     that can be used when you need
     to comment multiple lines */
   
  // The main function tells AdWords where to start. You always need
  // at least a main function in your script.
   
  // Let's start with some variables (or primatives)
  // More info on Javascript variables can be found:
  var clubName = 'Fight Club'; // declared with single quotes
  var rule1 = "Don't talk about fight club."; // or double quotes if needed
  var members = 12; // a number, no quotes
  var dues = 3.50; // also a number
  var isAcceptingNewMembers = true; // a boolean, for yes or no answers
   
  // When you need to store multiple values, consider an Array
  // More detailed intro to Arrays can be found here:
  var memberNames = ['brad','edward','robert'];
  // Which you can access the values with an index
  var coolestMember = memberNames[0]; // pronounced member names sub zero
  // 0 is the index of the first element of the array, 1 for the second, etc.
  // We can use the length property of an array to find out how big it is.
  var numberOfMembers = memberNames.length; // this will be 3
  var dailyFights = numberOfMembers*2; // star ( * ) is an operator for multiply
  // so the total number of fights is 6.
  // More on operators can be found here:
  // http://web.eecs.umich.edu/~bartlett/jsops.html
   
  // If you want to group multiple variables together, you can using an Object.
  // An Object is simply a grouping of common variables (and other stuff we'll see later)
  var FightClub = { // The curly brace says group these things together. there is another one at the end.
    clubName : 'The Fight Club', // a string variable. In an Object, we use : instead of = for assignment
    rules : ["Don't talk about fight club.",  // each variable is separated by a comma, instead of a semi-colon
             'Do not talk about fight club.'],
    memberNames : ['brad','eddy','robert','phil','dave'],
    dues : 3.50,
    foundedYear : 1999
  };
  // Now to access the variables inside the object, we use the dot
  Logger.log(FightClub.clubName); // prints The Fight Club
  Logger.log(FightClub.memberNames[0]); // prints brad
   
  // Objects are one of the most important concepts of Javascript and they will come back
  // again and again a little later. More details can be found here:
   
  // Sidebar: Why do I use camelCase for variable names? Technically
  // I could
  var UsEWhaTevERIwanteD = 'but camelCase is easier to read';
  // and conforms to the style guide that Google recommends:
  // Follow the style guide. It helps others read your code.
   
  // If statements (or control statements) allow you to split your code path if needed
  if(numberOfMembers > 10) { // if we have more than 10 members
    dues += 1.00; // increase the dues,
    // plus equals (+=) says "add the value on the right to the value on the left"
  } else { // otherwise
    dues -= 1.00; // decrease the dues
    // there are also -=, *= (multiply), /= (divide by), and %= (modulo equals)
  }
  // Comparison operators like >, <, ==, ===, <=, >= allow you to compare values
  // They return true or false, always
  // Notice the double and triple equal signs. That's not a typo. More info can be found at:
   
  // You can also have multiple if statements and multiple things to test
  if(dues > 5) { // if dues are over $5
    dailyFights++; // increase the fights
  } else if(dues > 2 && dues <= 5) { // if dues are greater than $2, but less than $5
    dailyFights--; // decrease the fights
  } else { // otherwise
    dailyFights = numberOfMembers*2; // reset the fights
  }
  // You'll probably notice none of this makes sense. it is only for example.
  // Double Ampersand && just means AND, || means OR. So in the statement above,
  // both statements with operators must be true in order for the fights to be decreased.
  // Oh, and ++, -- is shortcut for +=1 and -=1 respectively.
   
  // Ok, now lets talk about loops.
  // Here are a few different ways to loop through the members
  // This is called a While Loop and while it might be easy to understand,
  // You won't use it nearly as often as the other two.
  var i = 0; // the variable i is what we will use for each indice
  while(i < memberNames.length) { // while i is less than the length of names
    Logger.log(memberNames[i]); // print out the name
    i++; // and increment the index by 1
  }
  // i is a variable that controls the loop. A common issue with While loops
  // is that you will forget to increment the loop control and you get an infinate loop
   
  // This is the classic For loop
  // The declaration, checking, and incrementing are all done
  // in the first line so it is harder to miss them
  for(var index = 0; index < memberNames.length; index++) {
    Logger.log(memberNames[index]);
  }
   
  // And finally, the easiest loop but hardest to explain, the ForEach loop
  // This is just a variation of the For loop that handles incrementing index
  // behind the scenes so you don't have to.
  for(var index in memberNames) { // declare index, which will be assigned each indice
    Logger.log(memberNames[index]); // Use the indice to print each name
  }
   
  // You can jump out of a loop before it reaches the end by combining the if statement
  for(var index in memberNames) {
    if(memberNames[index] === 'edward') {
      break; // break is a keyword you can use to break out of the loop.
    }
    Logger.log(memberNames[index]);
  }
  // In this case, only the first name is printed because we broke out once we had the
  // second name. More on break and its partner, continue, check out:
   
  // Now let's talk about functions. We have already seen a function in action: main()
  // Functions are groupings of useful code that you can call over and over again easily
  function fight(player1, player2) {
    if(Math.random() < .5) {
      return player1;
    } else {
      return player2; // return means we are going to send player2 back
                      // to the code that called the function
    }
  }
  // This code can be called over and over again using a loop
  for(var player1 in memberNames) { // Loop through each member
    for(var player2 in memberNames) { // Then loop through again
      if(player1 !== player2) { // Players can't fight themselves so check for that
        Logger.log(fight(player1,player2)); // Then call the function we defined earlier
      }
    }
  }
  // This code calls fight() for:
  //    brad vs. edward, brad vs. robert
  //    edward vs. brad, edward vs. robert
  //    robert vs. brad, robert vs. edward
  // Some other functions we have been calling are Logger.log() and Math.random()
  // The cool thing is that as callers of the function, we only need to know how
  // to call the function, we don't need to know how it works behind the scenes
  // For example:
  //   var answer = LargeHadronColider.simulateEleventhDimensionalQuantumThingy(47);
  // Who knows how this works. All we need to know is to send it a number and expect a
  // number back.
   
  // I hope you've been noticing all of the Objects we have been using here. Logger is one,
  // Math is another one (and LargeHadronColider is a fake one). Along with variables, we
  // can also put functions in there as well:
  var FightClub = {
    // ... all that other stuff
    chant : function() {
      Logger.log('His name is Robert Paulson.');
    },
    totalMembers : 5
  };
  // Whoa trippy. So what happens when I call
  FightClub.chant();
  // It's going to print His name is Robert Paulson
   
  // The thing that makes Google AdWords Scripts different from writing just regular Javascript
  // is all of the pre-defined Objects that use functions to interact with AdWords.
  AdWordsApp.currentAccount();
  Utilities.jsonParse('{}');
  AdWordsApp.keywords().withLimit(10).get();
  // How does the above statement work?
  AdWordsApp  // this is a predefined object in AdWords Scripts
    .keywords() // which has a function called keywords() that returns a KeywordSelector object
    .withLimit(10) // which has a function withLimit() that returns the same KeywordSelector object
    .get(); // which has a function get() that returns a KeywordIterator object.
  // Check out the AdWords Scripts documentation to find the objects and classes that make up these calls
   
  // So I think that just about does it for this tutorial.  If you made it this far, awesome! Post a comment to ask
  // any questions you might have.
   
  // Thanks,
  // Russ
}


If you still find it intimidating, or you dont want to waste time copuing and pasting Scripts, there is always Hero Pro by PPC Hero. It costs between 100 to 400 and will take all the Scripting burden off your head.