-
Notifications
You must be signed in to change notification settings - Fork 218
Keywords
The approach used here contrasts with the traditional approach:
- go to a keyword tool
- research keywords related to topic a
- go through 600-700 words, and select the ones that work for you one by one
- group keywords into ad groups (some tools provide it for your, but you still need to verify)
- repeat for topic b
- remember that you have five thousand of those
- no thanks
The proposed approach:
- take a group of related products (a section of your website for example)
- make sure they are similar enough so that each keyword template would work on any of them
e.g. if you sell trips to a hundred cities "trips to <city>" and "tickets to <city>" should make sense for all cities - come up with as many words as you can think of that are relevant (use keyword tools for that) - generate all possible permutations of the product / service name, together with the words that you came up with Using advertools.kw_generate you can create a full table that includes a campaign name, ad groups, keywords, match types, and even labels in one function call.
As a result, your real task is to come up with the main words (usually around 30-40), and that's pretty much it. The products are given from your website, you just have to extract them or ask for them.
Now that your task is mainly focused on generating 30-40 words, you can think much more strategically and you don't have to worry about implementation headaches.
- efficiency especially in trying new approaches, or adding new products
- consistency: once you have the same keyword template across all your ad groups, then it becomes easy to compare which ones work and which don't
- completeness (almost): once you have brainstormed all the words that you can think of, then they will be there for all the products. You can / should always use phrase match for discovery, so as not to restrict yourself, and sometimes modified broad match.
### Code:
There is currently one function for generating keywords based on the above approach kw_generate
. Its name starts with the meaningful prefix, and is clear that it's about creating the keywords as opposed to discovering them.
#### Parameters: * products: a list of products / services that you have * words: the 30-40 words that you came up with * max_len: when combining the products with words, the function also generates permutations of more than one word together with the product. For example, if my product is 'shoes' and my words are 'buy', 'price', and 'shop', then the function would generate: buy shoes price shoes shop shoes as well as: shoes buy price shoes shop price etc. max_len makes sure that your permutations aren't more than a certain number of words. * match_types: I usually like to put different match types in the same ad group. If two similar keywords exist in different match types, the more specific match type will be taken. Also if they satisfy the same user intention, and lead to the same landing page, they should be part of the same ad group. I don't understand what the wisdom is, in separating keywords based on their match types. Let me know if you have good reasons for that, I'd like to know. * campaign_name: 'SEM_Campaign' is given by default, but it can be changed easily.
Each function call therefore produces keywords and ad groups that should belong to one campaign.
Some shortcomings / todos:
1. Synonyms: they are not handled properly. For example you might have two names that mean the same thing "new york" and "nyc" mean the same thing, but with the way the function works, they would go into different ad groups and unnecessarily separated. Possible immediate fixes: a. In the final table, you can easily make a few search and replaces in the ad group column. b. Don't change it! This might be a good idea if you want more granular control / analysis over your keywords.
2. Keyword ordering: the function currently returns all the permutations of the words (order is important, 'buy books' and 'books buy' are two different keywords). Last year Google announced that order is not important now. This might not be the case with most other platforms, so it might make sense to keep it. Another proper solution would be to add a new parameter to the function, checking whether or not order is important, and accordingly returning the permutations, or the combinations.