Get incoming Search Keywords to your Website/Blog
Nowadays, with the help of professional tools like Google Analytics, you can easily track all the keywords that bring visitors to your WordPress blog. However, you will need more than that to actually benefit from those keywords.
Using a simple PHP snippet you can easily extract all search terms people use to find your website, and then use those terms to display some fancy stuff to them on their landing pages.
Let’s start by firing up your theme’s functions.php file and put in the snippet below:
- function bwp_get_search_keywords($url = '')
- {
- // Get the referrer
- $referrer = (!empty($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '';
- $referrer = (!empty($url)) ? $url : $referrer;
- if (empty($referrer))
- return false;
- // Parse the referrer URL
- $parsed_url = parse_url($referrer);
- if (empty($parsed_url['host']))
- return false;
- $host = $parsed_url['host'];
- $query_str = (!empty($parsed_url['query'])) ? $parsed_url['query'] : '';
- $query_str = (empty($query_str) && !empty($parsed_url['fragment'])) ? $parsed_url['fragment'] : $query_str;
- if (empty($query_str))
- return false;
- // Parse the query string into a query array
- parse_str($query_str, $query);
- // Check some major search engines to get the correct query var
- $search_engines = array(
- 'q' => 'alltheweb|aol|ask|ask|bing|google',
- 'p' => 'yahoo',
- 'wd' => 'baidu'
- );
- foreach ($search_engines as $query_var => $se)
- {
- $se = trim($se);
- preg_match('/(' . $se . ')\./', $host, $matches);
- if (!empty($matches[1]) && !empty($query[$query_var]))
- return $query[$query_var];
- }
- return false;
- }
function bwp_get_search_keywords($url = '')
{
// Get the referrer
$referrer = (!empty($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '';
$referrer = (!empty($url)) ? $url : $referrer;
if (empty($referrer))
return false;
// Parse the referrer URL
$parsed_url = parse_url($referrer);
if (empty($parsed_url['host']))
return false;
$host = $parsed_url['host'];
$query_str = (!empty($parsed_url['query'])) ? $parsed_url['query'] : '';
$query_str = (empty($query_str) && !empty($parsed_url['fragment'])) ? $parsed_url['fragment'] : $query_str;
if (empty($query_str))
return false;
// Parse the query string into a query array
parse_str($query_str, $query);
// Check some major search engines to get the correct query var
$search_engines = array(
'q' => 'alltheweb|aol|ask|ask|bing|google',
'p' => 'yahoo',
'wd' => 'baidu'
);
foreach ($search_engines as $query_var => $se)
{
$se = trim($se);
preg_match('/(' . $se . ')\./', $host, $matches);
if (!empty($matches[1]) && !empty($query[$query_var]))
return $query[$query_var];
}
return false;
}Now in a global theme file (i.e. a file that is included on every page), for example header.php, you might have this:
- <div id="content">
- <?php
- $keywords = bwp_get_search_keywords();
- // do some fancy stuff here, for example:
- if ($keywords)
- echo sprintf(__('You have searched for %s.'), $keywords);
- ?>
<div id="content">
<?php
$keywords = bwp_get_search_keywords();
// do some fancy stuff here, for example:
if ($keywords)
echo sprintf(__('You have searched for %s.'), $keywords);
?>To test a specific referrer URL you can pass a $url variable to bwp_get_search_keywords(), for example this:
- echo bwp_get_search_keywords('http://www.google.com/search?source=ig&rlz=1G1GGLQ_ENVN265&=&q=wordpress.org&aq=f&aqi=&aql=&oq=');
echo bwp_get_search_keywords('http://www.google.com/search?source=ig&rlz=1G1GGLQ_ENVN265&=&q=wordpress.org&aq=f&aqi=&aql=&oq=');will give you this:
wordpress.org
By default this function supports a few search engines, but you can add more if you want. For example, to add Yandex (a Russian search engine) you must first check the query var that it uses, which is ‘text’, not ‘p’ or ‘q’ (try searching for something like ‘wordpress’ and you will get this URL: yandex.ru/yandsearch?text=wordpress&lr=10552).
After you have determined the query var, simply append it to the $search_engines array appropriately, like so:
- $search_engines = array(
- 'q' => 'alltheweb|aol|ask|ask|bing|google',
- 'p' => 'yahoo',
- 'wd' => 'baidu',
- 'text' => 'yandex'
- );
$search_engines = array( 'q' => 'alltheweb|aol|ask|ask|bing|google', 'p' => 'yahoo', 'wd' => 'baidu', 'text' => 'yandex' );
If there are more than one search engines that use the same query var, split their domain names using the vertical bar ( | ) characters (just like what I have done with the ‘q’ query var).
Notes: If the fancy stuff you are going to do involve the use of WordPress database (for example you get some related posts based on the search terms your visitors use), please remember to escape all the terms to avoid malicious queries.







This will be helpful, thank you!
Does this work for individual pages?
I just want to know what keywords are coming in for a particular post so that i could optimize it further
Yes it works for any kind of page, even archive page.
After I have installed the codes into my wordpress theme. where can i view the incoming search keywords?
You can view incoming keywords on any page, of course. Get the keywords right in your theme’s functions.php with this line of code:
To show them on any page, just add the line below to the corresponding theme file, for example single.php:
That’s it!
Thanks for a really neat bit of code. I am using it like this, to save the last incoming search term in a custom field:
$incoming_keywords = bwp_get_search_keywords(); if ( !empty( $incoming_keywords ) ) { global $post ; update_post_meta( $post->ID, "page_keywords", $incoming_keywords ) ; }By adding that code to header or footer.php every page will have a custom field “page_keywords” which shows the last incoming search term.to that page/post. When logged in, I then display the information on the page somewhere, like this:
Very useful when logged in and browsing the site.
Is this script work for custom php script .. ? if not then have u an idea any other script like this for custom php …?
Of course Mohd
.
Thank you so much. This will be helpful.
Is there any plugin for this? because i am not so good with coding and i might fall into trouble editing my site…
Many thanks for this, I will be using this code an manipulating to do this on static sites, basically getting keywords and search terms and when a client sends an enquiry can see what the keywords searched for are!
i’m using SEO SearchTerms Tagging 2 very helful. But not working with cache plugins.
Hi! thanks for this code this has been very helpful. I tried it on my site and it works however I think google has stopped working as the referrer does not contain anything on the ‘&q=’ section of teh query string. have you got any work around for this?
Is this code work on core php? or only in wordpress
ok its working thank you..
I really love your site.. Very nice colors & theme.
Did you create this site yourself? Please reply back as I’m planning to create my very own website and would love to find out where you got this from or exactly what the theme is called. Thanks!
It’s a custom theme I made for this site
Thank you for this helpful article. Very useful for beginners like me.
Greetings, I believe your web site could be having web browser compatibility problems.
When I look at your web site in Safari, it looks
fine however, if opening in IE, it has some overlapping issues.
I just wanted to give you a quick heads up! Apart from that,
great website!
I can’t for the life of me get this to work. I have followed it to the letter, even testing is fine…
echo bwp_get_search_keywords('hxxp://www.google.com/search?source=ig&rlz=1G1GGLQ_ENVN265&=&q=wordpress.org&aq=f&aqi=&aql=&oq=');…but when I take that out and test it via google.com I get nothing… any pointers?
Perhaps you should add some echo/print_r function in the function to determine which part is causing trouble (try print_r-ing $query).