Co-authors: Ajit Datar, Reza Arbabi, and Chirag Patel

LinkedIn is a network of professionals used by more than half a billion members to meet their professional goals. However, there are even more professionals who are either not on LinkedIn or are registered but don’t realize the full potential of LinkedIn and how the site can help them. Helping our existing and potential members organically discover the power of LinkedIn is an important part of our growth. When it comes to organic discovery, search engine optimization (SEO) remains the dominant channel for most use cases.

The principles for building good SEO pages are relatively straightforward. Both Google webmaster guidelines and Bing webmaster guidelines do a good job of educating the SEO community about best practices. However, when applying SEO principles, there are many small things that can go wrong at scale or be implemented in a suboptimal fashion. After building guest experiences for many years, we’ve learned a few things about developing search-engine-friendly guest experiences:  

  1. Build for humans, be friendly to search bots. User experience optimization leads to better SEO. Users like to see quality, engaging content.

  2. Fast is good. Specifically, the time to first paint matters. Server-side rendering (SSR) is still the king.  

  3. Information on the go. While desktop web remains important, discovery is increasingly shifting to mobile web.

With these principles in mind, we set out to build a framework for quickly developing SEO-friendly guest experiences. After the Greek word for guest hospitality, we have named the framework “Xenia.”  

In the following sections, we’ll explain how Xenia is built and how it provides a set of reusable UI components and tools for developing SEO-friendly guest experiences with improved developer productivity. We will also touch upon the tools and techniques we have used to build these UI components.

Overview

Xenia is built on top of the Play framework. It consists of two parts:

Xenia frontend  

  • A UI component library implements UI components conforming to LinkedIn’s design language, but with SEO best practices baked in.  

  • Play container provides components and Play filters for internationalization (hreflang), A/B testing, and service health monitoring. It also provides built-in support for QPS throttling in case search bot traffic spikes beyond your planned capacity.  

Xenia tools (Some of the Xenia tools are listed below; we have a few more that we’ll skip for brevity)

  • SEO A/B testing library: makes it easy for developers to set up the experiment segments partitioned by URLs. Integration with LinkedIn’s internal A/B testing measurement tools is also built in.  

  • SEO Beacon: fires events that collect data about the SEO signals on the page and stores them using our standard Kafka-based data pipeline. The audit tool performs offline analysis of these events to spot negative trends that might hurt the ranking of a page.

  • SEO Linter: provides a real-time analysis of the page from an SEO perspective as the developer is working on it. The tool highlights the sections of the page that might be implemented sub-optimally from an SEO perspective.  

Xenia frontend

LinkedIn infrastructure is optimized for Java virtual machine (JVM) services. We know how to efficiently build, deploy, and monitor Play services. However, Node.js is much faster at executing JavaScript templates than a JVM-based engine such as Nashorn. By hosting a Node.js process inside a Play container, we get the best of both.

LinkedIn