Search Engine Optimisation (SEO)

Summary of Achievements

  • Increased organic traffic by 205%
  • Increase revenue from organic traffic by 344% over 3 years
  • Reduce average page load time from ~5s to under 1s

Graph showing revenue and traffic increase over 3 yearsIncrease in traffic and revenue

Graph showing site speed decrease over 3 yearsDecrease in page load time

On-page SEO

Ahrefs is an excellent SEO tool. If you’ve got an established website, it’s definitely worth signing up and running an SEO audit to fix all of your on-page issues. For a site that’s already receiving a lot of traffic, fixing on-page issues is the quickest way to increase traffic and improve conversion rate (this is not the case for low-traffic sites). After you run an audit, as long as you can influence the people who make changes to your site (or you can do it yourself), most changes are fairly easy to implement. If you’re new to Search Engine Optimisation (SEO), Ahref’s blog is also an excellent way to learn more about it.

The Audit prompted us to:

  • Make all of our titles and description meta tags unique
  • Fix canonical problems and look into internationalising our site correctly.
  • Fix and remove any bad links (4xx/5xx errors), as well as unnecessary redirects. For internal links on a website, there shouldn’t be any redirects happening, you should know the end-point.
  • Add Open Graph and Twitter Card tags to our product pages, this improves how links look when people share links to your site.

100% Health score at Ahrefs

Mobile pages

When I took on responsibility for SEO at the company (2017), we had duplicate product pages — one for mobile, one for desktop. The mobile page were extremely simple, and honestly, not very functional. While rebuilding our website in .NET Core, we moved to a single, responsive product page for mobile, tablet, and desktop. This was necessary as Google was shifting their indexing to mobile first, and much of our site was not discoverable on mobile.

Internationalisation

eBooks.com has a different set of content and pricing available depending on which country you’re visiting from. Google recommends that if you’re selling into a lot of different countries, you either have different domains, or you have a subfolder for each country you serve to; for example, your homepage may look like https://www.ebooks.com/en-au/ for an English-speaking Australian audience, and https://www.ebooks.com/en-us/ for an English-speaking US audience. Originally, eBooks.com was split into 6 Portals: USA, Australia, Canada, UK, Europe and “Rest of World”. This caused problem as pricing and sales rights needed to be more specific than this, as prices and taxes often vary between countries in a region. Since eBooks.com sells books to every country, specifying the relationship between the same product page in different countries can be complex. To do this, you need each product page to link to the same product in each different country.

Canonicalization was addressed at the same time as internationalisation. By using the canonical tag, Google can crawl your site more effectively by reducing the number of pages it needs to index. The canonical tag directs Google to only index the URL specified in the canonical tag, even if the URL it is currently crawling slightly different. Mostly commonly, this is to prevent pages with additional query string parameters appended to it from being indexed as a separate web page.

Speed

A fast website greatly improves visitor experience and is looked upon favourably by search engines. The largest assets on the site, our book images were already optimised, but there were many additional things that we could do to improve page load. Pages with many expensive database look-ups (e.g. product pages) had their queries moved to asynchronous API requests, allowing us to render the page immediately with placeholders and then to “hydrate” them as the data was received.

In terms of our site’s software architecture, our mostly commonly used classes, such as “Book” had all its properties converted to Lazy, so properties were only initialised if they were needed.

We added 2 levels of caching to our website to greatly speed up commonly accessed pages. By using .NET Core’s built-in in-memory cache, we could keep frequently accessed books' prices in memory at the application level. In addition to this we leveraged Cloudflare’s excellent CDN, allowing us to cache our less time-sensitive API calls.