Get search query string from search engines using PHP

I have often come across situations when I would like to implement some functionality based on what the user searched for in a search engine like Google, Bing etc.

The search query string is normally passed as GET variables ‘q’ or ‘query’. The function below will return the search query string.

// Function returns the query string (q or query parameters) from the referrer
function get_search_query()
{
	$ref_keywords = '';
 
	// Get the referrer to the page
	$referrer = $_SERVER['HTTP_REFERER'];
	if (!empty($referrer))
	{
		//Parse the referrer URL
		$parts_url = parse_url($referrer);

		// Check if a query string exists
		$query = isset($parts_url['query']) ? $parts_url['query'] : '';
		if($query)
		{
			// Convert the query string into array
			parse_str($query, $parts_query);
			// Check if the parameters 'q' or 'query' exists, and if exists that is our search query terms.
			$ref_keywords = isset($parts_query['q']) ? $parts_query['q'] : (isset($parts_query['query']) ? $parts_query['query'] : '' );
		}
	}
	return $ref_keywords;
}

Note: Google has recently stopped sending the search query terms for all logged-in users. So, if a user is logged-in Google and searches for something and then follow a link to your site, you won’t be able to get the query terms that they searched for. The Making search more secure blog post by Google, explains this is more details.

Related posts:

  1. PHP isset() vs empty() vs is_null()
  2. PHP 7 – Null Coalesce Operator
  3. Parts of URL
  4. How to create CSV file using PHP

3 thoughts on “Get search query string from search engines using PHP”

Leave a Reply