Publishing to WordPress from Google Docs

Google Docs is great for collaboratively editing. You can share files, make comments, have conversations around specific areas, and make suggestions, all in real time. But it’s not so great for posting to WordPress. Yes, you can just copy and paste a post from Docs into WordPress, but in the process, you lose images and the formatting and spacing goes all weird. It’s definitely not plug and play; there’s a lot more fuss than I’d like.

I recently changed my workflow to collaboratively write in Google Docs and then publish in WordPress. I tried three different Google Docs add-ons, all of which claimed that they’d transfer articles to WordPress: none worked. So naturally, I was happy to see that the WordPress team have picked up on the problem and offered a solution: I can now draft using Docs and port my work right into WordPress. This means that I can spend more time writing and less time tinkering (procrastinating) with image and format settings.

Right now, their solution only works in Google’s Chrome browser. But given Chrome’s 58.5% market share there’s a good chance that won’t bother you.

To get going, you’ll need Google Chrome, a Google account with access to Google Drive, and a WordPress.com blog or self-hosted WordPress site that has the Jetpack plugin installed and configured.

First, Install The Chrome Extension

You can find WordPress.com for Google Docs on the Chrome store. Install it in your browser by clicking the “FREE” button on the extension’s page. After it’s installed, you’ll need to authorize it using your WordPress.com account (even if you’re using a self-hosted WordPress site) before you can start publishing.

Screenshot 2017-03-13 07.59.30.png

Second, Authorize It

Authorizing the extension will connect it to your WordPress.com account, which in turn, will connect it to your WordPress.com or self-hosted blog. It’s really easy to do. Just open a Google Doc and click on the “Add-ons” menu item. At the top you’ll see “Wordpress.com for Google Docs”. Select “Open” and a sidebar will appear. Hit the “Authorize” button.

Screenshot 2017-03-13 22.44.45.png

This will take you to a new page on WordPress.com which asks you to authorize access. It will also give you a list of WordPress sites connected to WordPress.com via the Jetpack plugin. Choose the site you want to connect to and click the “Approve” button.

Screenshot 2017-03-13 22.49.31.png

You may be required to login to WordPress.com or your web site in order to complete approval. Once that’s done, the sidebar will update, showing you the site connection.

Screenshot 2017-03-13 22.54.12.png

Third, Start Publishing

Publishing posts with this add-on is a snap. With the sidebar open, just click the “Save Draft” button. If the post has already been transferred to your site the button will say “Update Draft” instead.

To manage the post on your site–to publish it, to tinker with it–use the “Preview on …” link on the sidebar. I recommend only changing the content in Google Docs, since changes you make on your site will not copy back to Google Docs. Changes in Docs can sync to WordPress, but not the reverse.

Troubleshooting the Installation

I ran into some authorization problems when I tried to set up the extension.

To avoid this, first, be sure that you’re running the latest version of the Jetpack plugin. If you’re self-hosting, make sure you’re running an up-to-date copy of WordPress. If you’re hosted on WordPress.com you’re all set on this front.

If you use a security plugin like Wordfence, you may need to disable it temporarily while you authorize the extension. It’s also possible that plugins that intercept WordPress’ URL or API handling routines–security, redirection, SEO etc.–may interfere with authorization.

As an extreme tactic you might try briefly disabling all your WordPress plugins, except for Jetpack. Jetpack must be enabled; it’s a crucial part of the software that lets you publish from Google Docs to WordPress.

For example, I use Cloudflare as a Content Distribution Network (which provides major performance improvements to the site) and as a web application firewall for my site. But Cloudflare was intercepting the authorization request because it looked like an attempt to break into the site. So I temporarily “paused” Cloudflare using its dashboard, authorized the add-on and re-enabled it.

Screenshot 2017-03-13 08.36.49.png

If you do have to disable your CDN or security plugins, don’t get distracted and walk away while they’re still disabled. Disable what you need to, authorize the extension and then re-enable them immediately. If you can’t complete this in one fell swoop, come back to it later. Leaving them off keeps your site open to WordPress compromises, crippled functionality from missing plugins, and performance issues from your CDN being offline.

If you’re unable to resolve the problem on your own, contact Jetpack support. They’re quite responsive and have probably seen a variant of the problem you’re running into before.

Limitations?

So far, from my limited experience with the add-on, I’ve found that it works well and is easy to operate. It does what it’s supposed to do: uploads documents with basic formatting and image properties intact. However, the add-on is unidirectional: it will save a Google document to your site, but it will not load existing posts into Google Docs. And it appears to only work with posts. There’s no integration with pages just yet. I’ve also read that it doesn’t like working with footnotes, but I haven’t verified this myself.

All in all, this little extension is a welcome addition to my writing-publishing workflow. It saves me time and knocks out one more thing that I could’ve used to procrastinate. So thank you WordPress – well done!

Share this:
%d bloggers like this:
var _gaq = _gaq || []; var pluginUrl = '//www.google-analytics.com/plugins/ga/inpage_linkid.js'; _gaq.push(['_require', 'inpage_linkid', pluginUrl]); _gaq.push(['_setAccount', 'UA-239812-12']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();