Search code examples
javascriptgoogle-custom-search

Google Custom Search with mod_rewrite search term


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?


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