Growth hacking for websites

Your content is awesome, so where’s the crowd? After twenty years of helping startups, and a few major media brands, find an audience, I’ve learned that poorly formed metadata and slow performance are often the biggest culprits.

Fortunately, site optimization doesn’t have to be complex or time-consuming. If you’re on WordPress, you can perform all the steps here, and measure big improvements, in under an hour. If you’re using another CMS such as Drupal or Contentful, the steps will take longer but the principles are the same.

DevOps Optimization

Before we begin, ensure your server is set up for secure and fast content delivery. Most users will bypass your server when we’re done with this tutorial, but a few will still get through, and you’ll want your site to work great for everyone.

Optimizing your server operating system and adding an https certificate are the first two steps of website optimization.
Optimizing your server operating system and adding an https certificate are the first two steps of website optimization.

Make your site is https (if it’s not already)

Why you should do this: In my last job, I asked a product manager on my team to find out how much work it would be to slap an SSL certificate on one of the sites we managed, Our devops specialist estimated it would take about two weeks because the site was a sordid mix of Drupal, a custom CMS and some other PHP stacks that would need to be consolidated under a single cert. It sounded like a lot of work, but I gave it the green light.

One week after we launched the new cert, Google rewarded us with a 20% increase in organic traffic. If you’re operating on a single stack (such as wordpress) adding an SSL certificate will only take a few minutes, but you may see as big an impact on audience.

SSL certs are now the default for many hosts, and if you use a host managed through cPanel, this is fairly easy to set up. In cPanel, go to Let’s Encrypt SSL and follow the instructions to set up an ssl cert for your domain. You can go with the defaults unless you want to have your ssl cert apply to all subdomains (in which case, you’ll want to toggle to the dns setting).

If the padlock appears next to the url on all your pages (or if you haven’t installed wordpress) you’re done with this step. For an existing site, you’ll also need to update your wp-config file to recognize that your site is now https (or reinstall the site on the https domain).

Optimize PHP for speed

While you’re in cPanel, scroll down to Select PHP version. Here you should make sure you’re using the latest (current) PHP version, and that you have enabled all the modules that wordpress recommends. For the purposes of site optimization, you’re probably good with the defaults, but I had to tick the boxes next to imagick (which helps with image optimization) and opcache (which can massively speed up your site by preloading php scripts).

The Lighthouse site optimization test

Now it’s time to see how far your site has to go on the road to optimization. To perform an initial speed and SEO audit on your site open up an Incognito window in Chrome and navigate to a single post on your site. This is important: you’ll need it to be a single post (not your homepage) and an incognito window for the most representative test of what your real world users will experience when they link to a story from Google.

Now right click (or ctrl-click) and select inspect from the dropdown menu. In the box that appears on the bottom of the page, click the Lighthouse tab and select the Generate report button. Try not to cry. We’ll make it better.

Choose the right theme

There’s a lot more to choosing the right theme than loading speed, but performance is often an indicator of overall quality, so it has always been the primary driver for me. The default wordpress themes are pretty fast, but can be a little buggy on mobile. GeneratePress is another good choice.

Personally, I prefer Astra because it is highly configurable and has an extensive hook system that simplifies template customization. One note on Astra: if you add your logo, make sure you only use one logo and not a special logo for mobile. A second logo will bump up your cumulative layout shift, which is a measure of how much your site flashes or shifts after the initial load. Your users will notice the difference, and Google will count a slow-loading logo against your overall performance score.

SEO site optimization

Once you’ve optimized your server and picked the right theme, optimizing SEO will have the next biggest impact on the growth potential of your site. If I could only install one SEO site optimization tool, it would be RankMath. If you follow the setup wizard, you’ll get a perfect score in Lighthouse, which is better than Yoast, the longtime leader in this space, can manage out of the box.

But RankMath will take you so much further. Measuring how well every piece of content matches to popular searches is beyond the scope of the Lighthouse audit. I’d like to dwell for a moment on how RankMath fits into your production process because this is where you’ll get the most lift in audience discovery.

SEO optimization starts with finding a popular term that people are already searching for.
SEO optimization starts with finding a popular term that people are already searching for.

On your next post, you’ll see a score in the upper right corner that tells you how well your site title and other metadata matches to a popular search term. As you can see in the above image, I started out with a title that was close, but didn’t match exactly, with anything in the list of Focus Keywords suggested by RankMath. Once I selected my Focus Keyword, RankMath began adjusting my score as I integrated the keyword into my text — for instance, using the term “site optimization” in this sentence just had a slight impact on my score. I also like how RankMath is highly prescriptive about where to put the term and how to use it.

RankMath also helps by updating its recommendations over time. A crucial part of any SEO strategy is the recognition that SEO is a psuedo-science at best. Most of the recommendations I have read by SEO experts are backed up with scant evidence and conclusions derived from sometimes dubious sources like chatrooms and the twitter feed of that guy they know at Google. For this reason, the SEO community seems to group together around ever changing recommendations. Two years ago, Mega Menus (loading up your nav with a gazillion internal links) was considered a viable way to spread the love from a highly-ranked page to the rest of your site. Now that practice is discouraged as dilutive. Tools like RankMath help you to keep up with the latest trends without the need to become an expert yourself.

If you want to go deeper than RankMath, there are a number of tools that will give you a more nuanced view of your particular site’s optimization needs. I’m no SEO expert, but I’ve worked with several smart ones over the past two decades. Their analysis typically begins with site auditing tools like Ahrefs ($100 – $1000 per month) and Screaming Frog (free for the first 500 crawled links). Sometimes they’ll also create visualizations to support their recommendations to a broader group of executives. They would bristle at any attempt I made to prescribe a one-size-fits-all SEO solution, but often their recommendations will include ideas about how to improve the credibility and sourcing of content, improve page ranking by algorithmically deleting and redirecting poorly performing content to bring a site under the crawl budget, and adopting a hub and spoke content model.

Performance site optimization

Now that you have a perfect SEO score and a plan for integrating ongoing SEO improvement into your content production process, it’s time to make your site as fast as possible. Head over to your plugins section and type cache into the search box. I found that W3 Total Cache is complex, but offers the best customization of all the other top plugins you see on your screen. If you read the reviews, you’ll find that most people love it, but some folks give up before configuring it properly.

Fortunately for you, I’m going to provide a shortcut that will configure nearly all the steps of your caching optimization and deliver a perfect performance score for your site. If you want to read about each of these configurations, and why they matter, check out Blogging Wizard’s excellent post on configuring W3 Total Cache. I had to tweak a few of the suggestions to perfect my score, but it’s mostly spot on.

Import W3 Total Cache Settings

import settings to jumpstart your W3 total cache experience and prepare for Cloudflare integration.
Import settings to jumpstart your W3 total cache experience and prepare for Cloudflare integration.

Once you’ve activated the W3 Total Cache plugin, navigate to Performance > General Settings in the sidebar and find the Import / Export Settings link at the top of the screen, as shown above and import our generic W3 Total Cache settings json file (Hold down option when you click that link to download the file). If you’re porting over the settings from another site, make sure you update your cloudflare settings, since you’ll need a different zone for each site.

Now all you have to do is connect Cloudflare. Go to Cloudflare and click Add site (you’ll need to register for a free account if you haven’t already). Select the Free option and click through the review records screen (you don’t really need to worry about this unless you’re running additional services like email from your server, and even there, Cloudflare will likely configure it correctly).

In another browser tab (don’t close the Cloudflare page!), go to wherever you purchased your domain (not in cPanel) and replace the nameservers with the cloudflare servers ( and gene). Once you’ve done that, go back to Cloudflare page and click check nameservers and continue with set up of your account. Your choices here don’t matter much because W3 will be managing your cloudflare configuration, but I usually enable everything cloudflare offers in the setup wizard.

You'll need your Global API Key from Cloudflare to connect with W3 caching for the final performance optimization step for a fast wordpress site.
You’ll need your Global API Key from Cloudflare to connect with W3 caching for the final performance optimization step for a fast wordpress site.

As a last step, you need to connect W3 to Cloudflare. From your Cloudflare Profile Page select the API Tokens tab and select View next to your Global API Key. Now, in the WordPress sidebar, navigate to Performance > Extensions and click the Activate button next to Cloudflare.

Turn on performance monitoring from Google: As an optional, final step, scroll down to Miscellaneous in the General Settings and follow the instructions to add your Page Speed API Key. This will add a widget on your dashboard to show you how all your pages are doing from a performance perspective over time.

Image Best Practices for site optimization

Unless you’re running a portfolio site where image quality is the most important part of the site, you’ll want to compress your images as much as possible. Most people won’t notice the difference in quality, but they will notice the peppiness of your site. If you already have images on your site that you want to batch compress, you’ll want a plugin such as Smush.

For future images, you’ll want to add an off-site image optimizer into your process. I recommend ImageOptim to achieve an even better quality to compression ratio than Smush. Your productivity will also improve because the time it takes to drag and drop all your upload images for a post into the ImageOptim folder will take less time than the time you’ll save in image transmission to your blog.

Best Practices (Security site optimization)

Google wants the web to be secure, so they reward more secure sites with higher rankings. If you’re on WordPress, most of the best practices are baked into the platform, and you’ve already made your site https, so you’re most of the way there. Here are a few other steps that will keep your site secure for the foreseeable future:

Turn on auto-updates

WordPress should be set to auto-update, along with all of your plugins and themes. Auto-update shouldn’t break anything on your site unless you have tinkered with the core theme design, which you should never do. A better way to do this is to create a child theme which hooks into the master theme for updates but retains its own logic for your customization (beyond the scope of this tutorial).

Add the Wordfence plugin

Wordfence is the best free security plugin and requires very little customization. The only things I have tinkered with are the blocking rules, specific IPs to block, and 2FA authentication for all admins, but none of those are necessary for your Lighthouse score (just good practices).

Accessibility site optimization

Accessibility is core to site optimization, but it can be the hardest one to measure. Unless you have an accessibility need — for instance, you may be colorblind like me — you may not even know that your site has issues. If your initial lighthouse audit suggested an issue with contrast, you can see the specific problem items in the audit and usually change them with a small CSS update.

If you have an issue like tab order, it can be a more complicated fix that requires you to swap out an offending plugin or make some custom changes to your theme. But don’t ignore these issues. Nearly 10% of Americans are sight-impaired and another 10% are colorblind, so failing to make things easy for them can be a significant barrier to growing audience.

Follow up: ongoing site optimization

This is what a perfect lighthouse site optimization score looks like!
Queue the fireworks for a perfect site optimization score in Lighthouse.

The last step is to run that audit again and see how we did. If all goes well, you’re glaring at that rarest of internet beasts, the perfect Lighthouse score (with fireworks!).

If your site optimization scores aren’t perfect and you’ve confirmed that you’re viewing a story page in incognito mode, follow any suggested last steps in the audit (it’s possible something has changed since I wrote this!). Tweet me if you get stuck.