When we say “related posts for WordPress“, we say “bad performance”. Without using an external service like ElasticSearch, it’s practically impossible to have related posts work fast in WordPress. That’s why we’ve always stayed away from including any related posts plugin on our site. It’s also the reason we haven’t tried to come up with a solution ourselves before. In the upcoming release of Yoast SEO Premium, this will change. We found a way to have blazing fast related posts! Let me explain how we did that.
The fastest related posts ever
Our solution has a frontend and an admin component. Let me start by asking a very simple question:
On a content page, what would be the fastest implementation of related posts you could think of?
The (somewhat dull) answer:
Simple, old-fashioned links.
You simply don’t need to generate related posts, if you already link to your related content in your text. Not only is this better for frontend performance, it also benefits SEO. It’s simply better to link directly to your related content in a meaningful context, than to use a generic related posts box somewhere else on your page.
Of course this is easier said than done. The real problem related posts widgets solve is that you no longer have to think about related content yourself. So yes, we still need an algorithm to suggest related content, we just don’t need it on the frontend. Instead, we need to bring this functionality to the editor. This way, we can suggest the writer of an article which related posts he/she might want to link to in their text. We call these *internal linking suggestions*.
Why suggesting related content is costly
So, I guess we haven’t gotten rid of the problem of generating related content in a performant way. The thing we can’t seem to get around, is that we’ll have to do one, or more, very heavy queries to the database at some point. To suggest related links, we need to compare the content of one post with that of all the other posts on our site. The WordPress database isn’t optimized for such queries though. To do this in one operation is costly, and in case your site has a lot of content, that may slow things down substantially.
Indexing content, one post at a time
About a year ago, we moved our content analysis from the server side to the browser. This had a lot of advantages, but a slight inconvenience was that we could no longer calculate the SEO score for a post on the server. This calculation now has to be done in the browser for each post separately. This way we’ve already managed to dramatically improve server side performance with regard to our content analysis tool. When we started thinking about our prominent words algorithm, we realized this would also allow us to easily index content. Saving the most prominent words of every post to the server would make it very easy and cheap to query related content.
By leveraging our content analysis tool and utilizing the processing power of the browser to index content, one post at a time, we’ve managed to drastically reduce the heaviness of the queries needed to find related content. Now, we haven’t run any benchmarks yet, but it’s clear that this solution is much faster and easier to scale, without taking any serious performance hits.
In Yoast SEO Premium 4.0 – launching soon! – we’re shipping the first version of our internal linking suggestions tool. We’ll continue tweaking the algorithm to make sure our internal linking tool is the best and most performant related content tool available for WordPress.