Question

I'm using Google Custom Search on my site with a two-page configuration: when the form is sent from page 1 to page 2, page 2 display SERP. This is my page 2:

<script>
  (function() {
    var cx = '00000000000';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//www.google.com/cse/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>
<gcse:searchresults-only queryParameterName="query"></gcse:searchresults-only>
</script>

Everything works fine as long as page two is a "classic" /page2.php?query=searchTerm.

Now I'd like to use mod_rewrite to switch to a friendlier /page2/searchTerm. The rule itself is done, but I cannot understand how to edit Google script to make it understand that now the parameter is mod_rewritten or how to use something like gcse.searchTerm='this is what I want to search for'.

API v1 is deprecated, so I need to stick with API v2.

Any help?

Was it helpful?

Solution

I don't think you need that. Why would you want search engine friendly search results URL? As far I understand SEO, you don't want your search results to appear as results on Google, Bing, etc.

And in my opinion www.example.com/search?q=test is much more "friendly" than www.example.com/page2/test because it is more obvious what it is. (Search results page.)

But, maybe I'm overlooking something, OK.

There are probably much better ways, but I think this should work also:

<script>
var searchFromURL = function() {
  var element = google.search.cse.element.getElement('searchfromurlgname');
  // you can echo query with PHP or get it from window.location
  element.execute( window.location.pathname.replace('/page2/', '') );
};
var myCallback = function() {
  if (document.readyState == 'complete') {
    searchFromURL();
  } else {
    google.setOnLoadCallback(searchFromURL, true);
  }
};
window.__gcse = {
  callback: myCallback
};
(function() {
  var cx = '013315504628135767172:d6shbtxu-uo';
  // Insert your own Custom Search engine ID here
  var gcse = document.createElement('script'); gcse.type = 'text/javascript';
  gcse.async = true;
  gcse.src = (document.location.protocol == 'https' ? 'https:' : 'http:') +
      '//www.google.com/cse/cse.js?cx=' + cx;
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(gcse, s);
})();
</script>

<gcse:searchbox-only></gcse:searchbox-only>
<gcse:searchresults-only gname="searchfromurlgname"></gcse:searchresults-only>
<!-- switch CSE layout to "two page" -->

https://developers.google.com/custom-search/docs/element#tagparams

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top