Googlebot vs “Google Plus +1 Share Button bot”?


<h2>Site Setup</h2>

I have a fully client-side one page webapp that is dynamically updated and routed on the client side. I redirect any #! requests to a headless server that renders the request with javascript executed and returns the final html to the bot. The head of the site also contains:

<meta name="fragment" content="!"> <h2>Fetch as Google works</h2>

Using the Fetch as Google webmaster tool, in the Fetch Status page, I can see that the jQuery I used to update the og:title, og:image, and og:description was executed and the default values replaced. Everything looks good, and if I mouseover the URL, the screenshot is correct.

However, with the Google Plus button, no matter what values og:title, og:image, and og:description tags are updated to, the share pop-up always uses the default/initial values.

<h2>Attempted use</h2>

I call this after each time the site content is updated, rerouted, and og meta content updated.


I was assuming that if this approach works for the Googlebot, it should also work for the +1 button. Is there a difference between the Googlebot and whatever is used by +1 to retrieve the site metadata?

<em>edit: Passing a url containing the #! results in a 'site not found'</em>

gapi.plusone.render("plusone-div", {"href" : 'http://www.site.com/#!city/Paris');


The Google crawler does not render the snippet when the +1 button is rendered but rather when a user clicks the +1 button (or share button). What you should try is to determine what your server is sending to the Googlebot during this user initiated and asynchronous load by the Google crawler.

You can emulate this by using the following <a href="http://curl.haxx.se/docs/manpage.html" rel="nofollow">cURL</a> command:

curl -A "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0 Google (+https://developers.google.com/+/web/snippet/)" http://myurl.com/path/to/page

You can output that command to a file by adding -o testoutput.html to the command.

This will give you an idea of what the Google crawler sees when it encounters your page. The <a href="http://www.google.com/webmasters/tools/richsnippets" rel="nofollow">structured data testing tool</a> can also give you hints.

What you'll likely see is that unless your doing your snippet preparation in a static file or on the server side is that you're likely not going to get the snippet that you desire.

If you can provide real URLs to test, I can probably provide more specific feedback.


Google+ fetch the pages using the _escaped_fragment_ query parameter but without the equal sign.

So, it would fetch http://www.site.com/?_escaped_fragment and NOT https://www.site.com?_escaped_fragment_=

Google Search crawler still using the fragment with the equal sign, this is just for Google plus crawler.


  • Facebook open graph - did not specify reference object?
  • Facebook debugger reports “Circular redirect path detected” (301) on certain website
  • Firefox: mouseover doesn't work while mouse button is pressed
  • Bootstrap 3 Not Working in IE8
  • Trigger click on leaflet marker
  • Looking for a way to display labels on sunburst chart (could not find a working example)
  • Raphael - event when mouse near element
  • Facebook Share showing _escaped_fragment_ URL instead of hash version
  • DOMXML, PHP4 => PHP5
  • Xcode duplicated devices bug
  • QTP UFT Unable to find row count from table
  • textIndicatorPrecision in dojox.dgauges using dojo
  • MySQL multiple IN conditions to subquery with same table
  • What is the reason that Policy.getPolicy() is considered as it will retain a static reference to the
  • Want to understand iframe breakout code
  • Java : How to tint this PNG programmatically?
  • Is it possible to get the word under the mouse cursor in a ``?
  • BeautifulSoup difference between findAll and findChildren
  • NHibernate manually control fetching
  • HttpListener.IsSupported is false on XP SP3
  • npm 5.4.1 install/uninstall all failing
  • Web.config system.webserver errors
  • jQuery ready not fired after rails link_to is clicked
  • Google Custom Search with transparent background
  • Android fill_parent issue
  • Different response to non-authenticated users and AJAX calls
  • C# - Serializing and deserializing static member
  • How would I use PHP exceptions to define a redirect?
  • Incrementing object id automatically JS constructor (static method and variable)
  • jquery mobile loadPage not working
  • Do create extension work in single-user mode in postgres?
  • Function pointer “assignment from incompatible pointer type” only when using vararg ellipsis
  • Properly structure and highlight a GtkPopoverMenu using PyGObject
  • 0x202A in filename: Why?
  • Circular dependency while pushing http interceptor
  • AngularJs get employee from factory
  • How can I get HTML syntax highlighting in my editor for CakePHP?
  • How to set the response of a form post action to a iframe source?
  • Change div Background jquery
  • File not found error Google Drive API