Competition is a fact of life for business owners. You can’t avoid it. Regardless of what you do, you’re sure to be competing with other companies.
Fortunately, there are tricks and tools available to help you stay one step ahead of the competition and claim your share of the market. This process starts with understanding who your direct competitors are and what they’re doing.
Enter competitor intelligence.
What is competitor intelligence?
Competitor intelligence, also called competitor analysis, is the process of studying who your competitors are and what they do. It involves analyzing their strengths and weaknesses to learn from both their successes and failures.
Competitor analysis should form a central component of your business and marketing strategy. If you ignore it or do it halfheartedly, you are missing a significant opportunity. It provides you with a more rounded understanding of the landscape in which you’re operating, giving you vital insight and new ideas that will help you to stand out.
How do you do competitor intelligence?
Exactly how you do your competitor analysis will depend upon the nature of your business. In this section, I’ll talk you through some of the most effective strategies I’ve found and some of the tools you can use.
Work out who your competitors are
I know this seems obvious, but it’s perhaps the most critical step. Not every company operating in your industry will be a direct competitor. Myk Ponos defines a direct competitor as another company serving the same customer with the same problem and solving that problem with a similar product or service to yours.
I suggest focusing your initial competitor analysis on these direct competitors. You can always branch out later to include indirect threats, such as companies solving the same problem with a very different product or service, or using a similar product or service to solve a different issue.
Start with a company overview
Before you can carefully analyze a competitor, you need to understand the similarities and differences between their company and yours. So make a note of their founding date, number of employees, and annual turnover.
This information helps to contextualize the rest of your competitor analysis. If you’re running a startup, you will be in a very different position to a company that has been going for a decade. However, you can still draw insight and inspiration from that company’s current situation and the path it took to get there.
Put yourself in the position of the customer
Ultimately, your goal is to have customers choose your business over your competitors’. Therefore one of the best competitor intelligence strategies is to put yourself in the customer’s position. By stepping into their shoes, you can understand their needs and what would make them choose one company over another.
Start with your customer persona. This should give you a clear picture of your ideal client. Fill in some information about their demographics, professional position, what problems they have, and how your product solves those problems.
Once you know who your customer is, look at your customer journey. What stages does a customer go through between awareness (learning that your business exists) and conversion (making a purchase)?
How does your customer journey compare to your competitor’s? Ideally, you should sign up for their mailing list or go through the process of making a purchase on their e-commerce site, paying close attention to each phase of the journey. Is the process easy and painless? Are there any apparent chokepoints? Make a note of what you learn and use the information to improve your processes.
Product or service comparison
If you and your competitor make similar products or offer similar services, it makes sense to conduct a side-by-side comparison of the products or services and their features. This process will show up any weaknesses in your offering.
Ask yourself these questions about your own and competitors’ product or service:
What is the retail price? Do customers usually say it is too expensive, very cheap, or priced just right?
Are there any unique features, and how have these been received by customers?
Is the product reliable, or does it tend to break or malfunction?
What is the after-sale customer service like?
How visually appealing is the product (or the user interface of the service?)
Is it “one-size-fits-all,” or are elements customizable?
Be brutally honest. There is no point in doing competitor intelligence if your goal is to reassure yourself that you’re the best. Be as objective as you can about your strengths and weaknesses.
Everything you learn will help you improve your offering and make the next product or service you release even better.
Competitor keyword analysis
Search engine optimization (SEO) is essential if you want your business to stand out online. You need to implement a robust SEO strategy to ensure your site ranks highly in search engine results for the relevant keywords, allowing prospective customers to find you.
Therefore, competitor analysis should form part of your keyword research process. Ahrefs is a fantastic tool that will show you the traffic figures, backlink profile, and best performing keywords for any website.
Enter your competitor’s website URL, and use the “organic keywords” tab to see which pages and keyword searches generated the most clicks.
You can also use Moz’s Keyword Explorer and its Ranking Keywords analysis. The Ranking Keywords analysis allows you to make a direct comparison between your site and competitor’s. By making a direct comparison of keyword use and search engine rankings, you can spot keyword gaps.
Analyze PPC spend
Google Ads is a pay-per-click (PPC) advertising solution that allows website owners to “bid” for spaces at the top of search engine results for specific keywords. Here’s an example:
As you can see, the first four results are all PPC ads.
Analyzing your competitors’ PPC spend and their chosen keywords will give you valuable information around which to build your campaigns, including which keywords work well and which to avoid. SEMrush is a fantastic all-in-one SEO tool which comes into its own for competitor PPC research. This tool will show you your competitors’ PPC budgets, traffic, and top keywords.
First, check which platforms they’re on. Study metrics including number of followers, audience growth or stagnation, and the average number of engagements on each post. Do they have thousands of followers but very little engagement? This implies that their content is not of a high enough standard. Do they have a small but loyal and engaged following? Does one channel perform significantly better than others?
Once you’ve analyzed the social media presence of a few of your direct competitors, perform a SWOT analysis – a breakdown of the Strengths, Weaknesses, Opportunities, and Threats in your social media strategy.
BuzzSumo is a useful tool for competitor social media analysis. This tool allows you to see your competitors’ most popular content based on specific keywords, broken down by platform:
You can use this analysis to identify both threats and gaps you may be able to fill. The paid version of Buzzsumo gives you detailed competitor reports, including content format, length, publication date, and average shares on each platform.
Content strategy analysis
Perhaps I’m biased as an SEO marketer, but I still believe content is king. Therefore, take the time to analyze your competitors’ content strategy and how well it is working.
Does your competitor have a blog, and what content do they publish on it? Do they publish e-books, whitepapers, podcasts, videos, or any other form of content? Identify gaps in their coverage that you could fill in and what resonates with their audience. Use Moz’s Link Explorer and the Top Pages tab to see which pages on your competitors’ site are linked to the most often.
Pay particular attention to content your competitors are giving away for free. Offering value from the moment someone lands on your website for the first time is one of the most crucial aspects of successful marketing. Therefore, it is essential to ensure your free content is second to none if you expect your target customers to part with their hard-earned cash.
What not to do
Don’t be tempted to steal or directly copy your competitors’ ideas. The goal of competitor intelligence is to gain insight and inspiration, not to mimic exactly what other companies are doing. Not only is this a waste of time, but you could run into legal issues.
Other competitor intelligence mistakes to be aware of include focusing your efforts either too broadly or too narrowly, and conducting an analysis once and then forgetting about it. Your competitors will keep growing and innovating, and you must keep on top of what they’re doing if you want to keep your edge.
Competitor intelligence is time well spent
Competitor intelligence might seem like a lot of work. However, if you invest time in it, you will reap the benefits.
Understanding the full context of the marketplace in which you’re operating is vital to business success. Therefore, understanding your competitors is a critical piece of that puzzle.
No business exists in a vacuum. By keeping an eye on what your competitors are doing, you’ll be better equipped to develop fantastic products, provide amazing customer service, and ensure your digital marketing strategy is up to scratch.
Competition is a fact of life for business owners. You can’t avoid it. Regardless of what you do, you’re sure to be competing with other companies.
Fortunately, there are tricks and tools available to help you stay one step ahead of the competition and claim your share of the market. This process starts with understanding who your direct competitors are and what they’re doing.
Enter competitor intelligence.
What is competitor intelligence?
Competitor intelligence, also called competitor analysis, is the process of studying who your competitors are and what they do. It involves analyzing their strengths and weaknesses to learn from both their successes and failures.
Competitor analysis should form a central component of your business and marketing strategy. If you ignore it or do it halfheartedly, you are missing a significant opportunity. It provides you with a more rounded understanding of the landscape in which you’re operating, giving you vital insight and new ideas that will help you to stand out.
How do you do competitor intelligence?
Exactly how you do your competitor analysis will depend upon the nature of your business. In this section, I’ll talk you through some of the most effective strategies I’ve found and some of the tools you can use.
Work out who your competitors are
I know this seems obvious, but it’s perhaps the most critical step. Not every company operating in your industry will be a direct competitor. Myk Ponos defines a direct competitor as another company serving the same customer with the same problem and solving that problem with a similar product or service to yours.
I suggest focusing your initial competitor analysis on these direct competitors. You can always branch out later to include indirect threats, such as companies solving the same problem with a very different product or service, or using a similar product or service to solve a different issue.
Start with a company overview
Before you can carefully analyze a competitor, you need to understand the similarities and differences between their company and yours. So make a note of their founding date, number of employees, and annual turnover.
This information helps to contextualize the rest of your competitor analysis. If you’re running a startup, you will be in a very different position to a company that has been going for a decade. However, you can still draw insight and inspiration from that company’s current situation and the path it took to get there.
Put yourself in the position of the customer
Ultimately, your goal is to have customers choose your business over your competitors’. Therefore one of the best competitor intelligence strategies is to put yourself in the customer’s position. By stepping into their shoes, you can understand their needs and what would make them choose one company over another.
Start with your customer persona. This should give you a clear picture of your ideal client. Fill in some information about their demographics, professional position, what problems they have, and how your product solves those problems.
Once you know who your customer is, look at your customer journey. What stages does a customer go through between awareness (learning that your business exists) and conversion (making a purchase)?
How does your customer journey compare to your competitor’s? Ideally, you should sign up for their mailing list or go through the process of making a purchase on their e-commerce site, paying close attention to each phase of the journey. Is the process easy and painless? Are there any apparent chokepoints? Make a note of what you learn and use the information to improve your processes.
Product or service comparison
If you and your competitor make similar products or offer similar services, it makes sense to conduct a side-by-side comparison of the products or services and their features. This process will show up any weaknesses in your offering.
Ask yourself these questions about your own and competitors’ product or service:
What is the retail price? Do customers usually say it is too expensive, very cheap, or priced just right?
Are there any unique features, and how have these been received by customers?
Is the product reliable, or does it tend to break or malfunction?
What is the after-sale customer service like?
How visually appealing is the product (or the user interface of the service?)
Is it “one-size-fits-all,” or are elements customizable?
Be brutally honest. There is no point in doing competitor intelligence if your goal is to reassure yourself that you’re the best. Be as objective as you can about your strengths and weaknesses.
Everything you learn will help you improve your offering and make the next product or service you release even better.
Competitor keyword analysis
Search engine optimization (SEO) is essential if you want your business to stand out online. You need to implement a robust SEO strategy to ensure your site ranks highly in search engine results for the relevant keywords, allowing prospective customers to find you.
Therefore, competitor analysis should form part of your keyword research process. Ahrefs is a fantastic tool that will show you the traffic figures, backlink profile, and best performing keywords for any website.
Enter your competitor’s website URL, and use the “organic keywords” tab to see which pages and keyword searches generated the most clicks.
You can also use Moz’s Keyword Explorer and its Ranking Keywords analysis. The Ranking Keywords analysis allows you to make a direct comparison between your site and competitor’s. By making a direct comparison of keyword use and search engine rankings, you can spot keyword gaps.
Analyze PPC spend
Google Ads is a pay-per-click (PPC) advertising solution that allows website owners to “bid” for spaces at the top of search engine results for specific keywords. Here’s an example:
As you can see, the first four results are all PPC ads.
Analyzing your competitors’ PPC spend and their chosen keywords will give you valuable information around which to build your campaigns, including which keywords work well and which to avoid. SEMrush is a fantastic all-in-one SEO tool which comes into its own for competitor PPC research. This tool will show you your competitors’ PPC budgets, traffic, and top keywords.
First, check which platforms they’re on. Study metrics including number of followers, audience growth or stagnation, and the average number of engagements on each post. Do they have thousands of followers but very little engagement? This implies that their content is not of a high enough standard. Do they have a small but loyal and engaged following? Does one channel perform significantly better than others?
Once you’ve analyzed the social media presence of a few of your direct competitors, perform a SWOT analysis – a breakdown of the Strengths, Weaknesses, Opportunities, and Threats in your social media strategy.
BuzzSumo is a useful tool for competitor social media analysis. This tool allows you to see your competitors’ most popular content based on specific keywords, broken down by platform:
You can use this analysis to identify both threats and gaps you may be able to fill. The paid version of Buzzsumo gives you detailed competitor reports, including content format, length, publication date, and average shares on each platform.
Content strategy analysis
Perhaps I’m biased as an SEO marketer, but I still believe content is king. Therefore, take the time to analyze your competitors’ content strategy and how well it is working.
Does your competitor have a blog, and what content do they publish on it? Do they publish e-books, whitepapers, podcasts, videos, or any other form of content? Identify gaps in their coverage that you could fill in and what resonates with their audience. Use Moz’s Link Explorer and the Top Pages tab to see which pages on your competitors’ site are linked to the most often.
Pay particular attention to content your competitors are giving away for free. Offering value from the moment someone lands on your website for the first time is one of the most crucial aspects of successful marketing. Therefore, it is essential to ensure your free content is second to none if you expect your target customers to part with their hard-earned cash.
What not to do
Don’t be tempted to steal or directly copy your competitors’ ideas. The goal of competitor intelligence is to gain insight and inspiration, not to mimic exactly what other companies are doing. Not only is this a waste of time, but you could run into legal issues.
Other competitor intelligence mistakes to be aware of include focusing your efforts either too broadly or too narrowly, and conducting an analysis once and then forgetting about it. Your competitors will keep growing and innovating, and you must keep on top of what they’re doing if you want to keep your edge.
Competitor intelligence is time well spent
Competitor intelligence might seem like a lot of work. However, if you invest time in it, you will reap the benefits.
Understanding the full context of the marketplace in which you’re operating is vital to business success. Therefore, understanding your competitors is a critical piece of that puzzle.
No business exists in a vacuum. By keeping an eye on what your competitors are doing, you’ll be better equipped to develop fantastic products, provide amazing customer service, and ensure your digital marketing strategy is up to scratch.
Today, we’ll briefly discuss why it’s important to write automated tests for any software project, and shed light on some of the common types of automated testing. We’ll build a to-do list app by following the Test-Driven Development (TDD) approach. I’ll show you how to write both unit and functional tests, and in the process, explain what code mocks are by mocking a few libraries. I’ll be using a combination of RTL and Jest — both of which come pre-installed in any new project created with Create-React-App (CRA).
To follow along, you need to know how to set up and navigate a new React project and how to work with the yarn package manager (or npm). Familiarities with Axios and React-Router are also required.
Best Practices With React
React is a fantastic JavaScript library for building rich user interfaces. It provides a great component abstraction for organizing your interfaces into well-functioning code, and there’s just about anything you can use it for. articles on React ?
Why You Should Test Your Code
Before shipping your software to end-users, you first have to confirm that it is working as expected. In other words, the app should satisfy its project specifications.
Just as it is important to test our project as a whole before shipping it to end-users, it’s also essential to keep testing our code during the lifetime of a project. This is necessary for a number of reasons. We may make updates to our application or refactor some parts of our code. A third-party library may undergo a breaking change. Even the browser that is running our web application may undergo breaking changes. In some cases, something stops working for no apparent reason — things could go wrong unexpectedly. Thus, it is necessary to test our code regularly for the lifetime of a project.
Broadly speaking, there are manual and automated software tests. In a manual test, a real user performs some action on our application to verify that they work correctly. This kind of test is less reliable when repeated several times because it’s easy for the tester to miss some details between test runs.
In an automated test, however, a test script is executed by a machine. With a test script, we can be sure that whatever details we set in the script will remain unchanged on every test run.
This kind of test gives us the benefits of being predictable and fast, such that we can quickly find and fix bugs in our code.
Having seen the necessity of testing our code, the next logical question is, what sort of automated tests should we write for our code? Let’s quickly go over a few of them.
Types Of Automated Testing
There are many different types of automated software testing. Some of the most common ones are unit tests, integration tests, functional tests, end-to-end tests, acceptance tests, performance tests, and smoke tests.
Unit test
In this kind of test, the goal is to verify that each unit of our application, considered in isolation, is working correctly. An example would be testing that a particular function returns an expected value, give some known inputs. We’ll see several examples in this article.
Smoke test
This kind of test is done to check that the system is up and running. For example, in a React app, we could just render our main app component and call it a day. If it renders correctly we can be fairly certain that our app would render on the browser.
Integration test
This sort of test is carried out to verify that two or more modules can work well together. For example, you might run a test to verify that your server and database are actually communicating correctly.
Functional test
A functional test exists to verify that the system meets its functional specification. We’ll see an example later.
End-to-end test
This kind of test involves testing the application the same way it would be used in the real world. You can use a tool like cypress for E2E tests.
Acceptance test
This is usually done by the business owner to verify that the system meets specifications.
Performance test
This sort of testing is carried out to see how the system performs under significant load. In frontend development, this is usually about how fast the app loads on the browser.
When it comes to testing React applications, there are a few testing options available, of which the most common ones I know of are Enzyme and React Testing Library (RTL).
RTL is a subset of the @testing-library family of packages. Its philosophy is very simple. Your users don’t care whether you use redux or context for state management. They care less about the simplicity of hooks nor the distinction between class and functional components. They just want your app to work in a certain way. It is, therefore, no surprise that the testing library’s primary guiding principle is
“The more your tests resemble the way your software is used, the more confidence they can give you.”
So, whatever you do, have the end-user in mind and test your app just as they would use it.
Choosing RTL gives you a number of advantages. First, it’s much easier to get started with it. Every new React project bootstrapped with CRA comes with RTL and Jest configured. The React docs also recommend it as the testing library of choice. Lastly, the guiding principle makes a lot of sense — functionality over implementation details.
With that out of the way, let’s get started with building a to-do list app, following the TDD approach.
Project Setup
Open a terminal and copy and run the below command.
# start new react project and start the server
npx create-react-app start-rtl && cd start-rtl && yarn start
This should create a new React project and start the server on http://localhost:3000. With the project running, open a separate terminal, run yarn test and then press a. This runs all tests in the project in watch mode. Running the test in watch mode means that the test will automatically re-run when it detects a change in either the test file or the file that is being tested. On the test terminal, you should see something like the picture below:
You should see a lot of greens, which indicates that the test we’re running passed in flying colors.
As I mentioned earlier, CRA sets up RTL and Jest for every new React project. It also includes a sample test. This sample test is what we just executed.
When you run the yarn test command, react-scripts calls upon Jest to execute the test. Jest is a JavaScript testing framework that’s used in running tests. You won’t find it listed in package.json but you can do a search inside yarn.lock to find it. You can also see it in node_modules/.
Jest is incredible in the range of functionality that it provides. It provides tools for assertions, mocking, spying, etc. I strongly encourage you to take at least a quick tour of the documentation. There’s a lot to learn there that I cannot scratch in this short piece. We’ll be using Jest a lot in the coming sections.
Open package.json let’s see what we have there. The section of interest is dependencies.
The render method of RTL renders the component and returns an object which is de-structured for the getByText query. This query finds elements in the DOM by their display text. Queries are the tools for finding elements in the DOM. The complete list of queries can be found here. All of the queries from the testing library are exported by RTL, in addition to the render, cleanup, and act methods. You can read more about these in the API section.
The text is matched with the regular expression /learn react/i. The i flag makes the regular expression case-insensitive. We expect to find the text Learn React in the document.
All of this mimics the behavior a user would experience in the browser when interacting with our app.
Let’s start making the changes required by our app. Open App.js and replace the content with the below code.
import React from "react";
import "./App.css";
function App() {
return (
<div className="App">
<header className="App-header">
<h2>Getting started with React testing library</h2>
</header>
</div>
);
}
export default App;
If you still have the test running, you should see the test fail. Perhaps you can guess why that is the case, but we’ll return to it a bit later. Right now I want to refactor the test block.
Replace the test block in src/App.test.js with the code below:
# use describe, it pattern
describe("<App />", () => {
it("Renders <App /> component correctly", () => {
const { getByText } = render(<App />);
expect(getByText(/Getting started with React testing library/i)).toBeInTheDocument();
});
});
This refactor makes no material difference to how our test will run. I prefer the describe and it pattern as it allows me structure my test file into logical blocks of related tests. The test should re-run and this time it will pass. In case you haven’t guessed it, the fix for the failing test was to replace the learn react text with Getting started with React testing library.
In case you don’t have time to write your own styles you can just copy the one below into App.css.
You should already see the page title move up after adding this CSS.
I consider this a good point for me to commit my changes and push to Github. The corresponding branch is 01-setup.
Let’s continue with our project setup. We know we’re going to need some navigation in our app so we need React-Router. We’ll also be making API calls with Axios. Let’s install both.
# install react-router-dom and axios
yarn add react-router-dom axios
Most React apps you’ll build will have to maintain state. There’s a lot of libraries available for managing state. But for this tutorial, I’ll be using React’s context API and the useContext hook. So let’s set up our app’s context.
Create a new file src/AppContext.js and enter the below content.
Here we create a new context with React.createContext({}), for which the initial value is an empty object. We then define an AppProvider component that accepts children component. It then wraps those children in AppContext.Provider, thus making the { appData, appDispatch } object available to all children anywhere in the render tree.
Our reducer function defines two action types.
LOAD_TODOLIST which is used to update the todoList array.
LOAD_SINGLE_TODO which is used to update activeToDoItem.
appData and appDispatch are both returned from the useReducer hook. appData gives us access to the values in the state while appDispatch gives us a function which we can use to update the app’s state.
Now open index.js, import the AppProvider component and wrap the component with . Your final code should look like what I have below.
Wrapping inside makes AppContext available to every child component in our app.
Remember that with RTL, the aim is to test our app the same way a real user would interact with it. This implies that we also want our tests to interact with our app state. For that reason, we also need to make our available to our components during tests. Let’s see how to make that happen.
The render method provided by RTL is sufficient for simple components that don’t need to maintain state or use navigation. But most apps require at least one of both. For this reason, it provides a wrapper option. With this wrapper, we can wrap the UI rendered by the test renderer with any component we like, thus creating a custom render. Let’s create one for our tests.
Create a new file src/custom-render.js and paste the following code.
import React from "react";
import { render } from "@testing-library/react";
import { MemoryRouter } from "react-router-dom";
import { AppProvider } from "./AppContext";
const Wrapper = ({ children }) => {
return (
<AppProvider>
<MemoryRouter>{children}</MemoryRouter>
</AppProvider>
);
};
const customRender = (ui, options) =>
render(ui, { wrapper: Wrapper, ...options });
// re-export everything
export * from "@testing-library/react";
// override render method
export { customRender as render };
Here we define a component that accepts some children component. It then wraps those children inside and . MemoryRouter is
A that keeps the history of your “URL” in memory (does not read or write to the address bar). Useful in tests and non-browser environments like React Native.
We then create our render function, providing it the Wrapper we just defined through its wrapper option. The effect of this is that any component we pass to the render function is rendered inside , thus having access to navigation and our app’s state.
The next step is to export everything from @testing-library/react. Lastly, we export our custom render function as render, thus overriding the default render.
Note that even if you were using Redux for state management the same pattern still applies.
Let’s now make sure our new render function works. Import it into src/App.test.js and use it to render the component.
Open App.test.js and replace the import line. This
import { render } from '@testing-library/react';
should become
import { render } from './custom-render';
Does the test still pass? Good job.
There’s one small change I want to make before wrapping up this section. It gets tiring very quickly to have to write const { getByText } and other queries every time. So, I’m going to be using the screen object from the DOM testing library henceforth.
Import the screen object from our custom render file and replace the describe block with the code below.
We’re now accessing the getByText query from the screen object. Does your test still pass? I’m sure it does. Let’s continue.
If your tests don’t pass you may want to compare your code with mine. The corresponding branch at this point is 02-setup-store-and-render.
Testing And Building The To-Do List Index Page
In this section, we’ll pull to-do items from http://jsonplaceholder.typicode.com/. Our component specification is very simple. When a user visits our app homepage,
show a loading indicator that says Fetching todos while waiting for the response from the API;
display the title of 15 to-do items on the screen once the API call returns (the API call returns 200). Also, each item title should be a link that will lead to the to-do details page.
Following a test-driven approach, we’ll write our test before implementing the component logic. Before doing that we’ll need to have the component in question. So go ahead and create a file src/TodoList.js and enter the following content:
Since we know the component specification we can test it in isolation before incorporating it into our main app. I believe it’s up to the developer at this point to decide how they want to handle this. One reason you might want to test a component in isolation is so that you don’t accidentally break any existing test and then having to fight fires in two locations. With that out of the way let’s now write the test.
Create a new file src/TodoList.test.js and enter the below code:
import React from "react";
import axios from "axios";
import { render, screen, waitForElementToBeRemoved } from "./custom-render";
import { TodoList } from "./TodoList";
import { todos } from "./makeTodos";
describe("<App />", () => {
it("Renders <TodoList /> component", async () => {
render(<TodoList />);
await waitForElementToBeRemoved(() => screen.getByText(/Fetching todos/i));
expect(axios.get).toHaveBeenCalledTimes(1);
todos.slice(0, 15).forEach((td) => {
expect(screen.getByText(td.title)).toBeInTheDocument();
});
});
});
Inside our test block, we render the component and use the waitForElementToBeRemoved function to wait for the Fetching todos text to disappear from the screen. Once this happens we know that our API call has returned. We also check that an Axios get call was fired once. Finally, we check that each to-do title is displayed on the screen. Note that the it block receives an async function. This is necessary for us to be able to use await inside the function.
Each to-do item returned by the API has the following structure.
The only condition is that each id should be unique.
Create a new file src/makeTodos.js and enter the below content. This is the source of todos we’ll use in our tests.
const makeTodos = (n) => {
// returns n number of todo items
// default is 15
const num = n || 15;
const todos = [];
for (let i = 0; i < num; i++) {
todos.push({
id: i,
userId: i,
title: `Todo item ${i}`,
completed: [true, false][Math.floor(Math.random() * 2)],
});
}
return todos;
};
export const todos = makeTodos(200);
This function simply generates a list of n to-do items. The completed line is set by randomly choosing between true and false.
Unit tests are supposed to be fast. They should run within a few seconds. Fail fast! This is one of the reasons why letting our tests make actual API calls is impractical. To avoid this we mock such unpredictable API calls. Mocking simply means replacing a function with a fake version, thus allowing us to customize the behavior. In our case, we want to mock the get method of Axios to return whatever we want it to. Jest already provides mocking functionality out of the box.
Let’s now mock Axios so it returns this list of to-dos when we make the API call in our test. Create a file src/__mocks__/axios.js and enter the below content:
import { todos } from "../makeTodos";
export default {
get: jest.fn().mockImplementation((url) => {
switch (url) {
case "https://jsonplaceholder.typicode.com/todos":
return Promise.resolve({ data: todos });
default:
throw new Error(`UNMATCHED URL: ${url}`);
}
}),
};
When the test starts, Jest automatically finds this mocks folder and instead of using the actual Axios from node_modules/ in our tests, it uses this one. At this point, we’re only mocking the get method using Jest’s mockImplementation method. Similarly, we can mock other Axios methods like post, patch, interceptors, defaults etc. Right now they’re all undefined and any attempt to access, axios.post for example, would result in an error.
Note that we can customize what to return based on the URL the Axios call receives. Also, Axios calls return a promise which resolves to the actual data we want, so we return a promise with the data we want.
At this point, we have one passing test and one failing test. Let’s implement the component logic.
Open src/TodoList.js let’s build out the implementation piece by piece. Start by replacing the code inside with this one below.
import React from "react";
import axios from "axios";
import { Link } from "react-router-dom";
import "./App.css";
import { AppContext } from "./AppContext";
export const TodoList = () => {
const [loading, setLoading] = React.useState(true);
const { appData, appDispatch } = React.useContext(AppContext);
React.useEffect(() => {
axios.get("https://jsonplaceholder.typicode.com/todos").then((resp) => {
const { data } = resp;
appDispatch({ type: "LOAD_TODOLIST", todoList: data });
setLoading(false);
});
}, [appDispatch, setLoading]);
return (
<div>
// next code block goes here
</div>
);
};
We import AppContext and de-structure appData and appDispatch from the return value of React.useContext. We then make the API call inside a useEffect block. Once the API call returns, we set the to-do list in state by firing the LOAD_TODOLIST action. Finally, we set the loading state to false to reveal our to-dos.
We slice appData.todoList to get the first 15 items. We then map over those and render each one in a tag so we can click on it and see the details. Note the data-testid attribute on each Link. This should be a unique ID that will aid us in finding individual DOM elements. In a case where we have similar text on the screen, we should never have the same ID for any two elements. We’ll see how to use this a bit later.
My tests now pass. Does yours pass? Great.
Let’s now incorporate this component into our render tree. Open up App.js let’s do that.
First things. Add some imports.
import { BrowserRouter, Route } from "react-router-dom";
import { TodoList } from "./TodoList";
We need BrowserRouter for navigation and Route for rendering each component in each navigation location.
This is simply telling the browser to render the component when we’re on the root location, /. Once this is done, our tests still pass but you should see some error messages on your console telling you about some act something. You should also see that the component seems to be the culprit here.
Since we’re sure that our TodoList component by itself is okay, we have to look at the App component, inside of which is rendered the component.
This warning may seem complex at first but it is telling us that something is happening in our component that we’re not accounting for in our test. The fix is to wait for the loading indicator to be removed from the screen before we proceed.
Open up App.test.js and update the code to look like so:
import React from "react";
import { render, screen, waitForElementToBeRemoved } from "./custom-render";
import App from "./App";
describe("<App />", () => {
it("Renders <App /> component correctly", async () => {
render(<App />);
expect(
screen.getByText(/Getting started with React testing library/i)
).toBeInTheDocument();
await waitForElementToBeRemoved(() => screen.getByText(/Fetching todos/i));
});
});
We’ve made two changes. First, we changed the function in the it block to an async function. This is a necessary step to allow us to use await in the function body. Secondly, we wait for the Fetching todos text to be removed from the screen. And voila!. The warning is gone. Phew! I strongly advise that you bookmark this post by Kent Dodds for more on this act warning. You’re gonna need it.
Now open the page in your browser and you should see the list of to-dos. You can click on an item if you like, but it won’t show you anything because our router doesn’t yet recognize that URL.
For comparison, the branch of my repo at this point is 03-todolist.
Let’s now add the to-do details page.
Testing And Building The Single To-Do Page
To display a single to-do item we’ll follow a similar approach. The component specification is simple. When a user navigates to a to-do page:
The only thing new to us in this file is the const { id } = useParams() line. This is a hook from react-router-dom that lets us read URL parameters. This id is going to be used in fetching a to-do item from the API.
This situation is a bit different because we’re going to be reading the id from the location URL. We know that when a user clicks a to-do link, the id will show up in the URL which we can then grab using the useParams() hook. But here we’re testing the component in isolation which means that there’s nothing to click, even if we wanted to. To get around this we’ll have to mock react-router-dom, but only some parts of it. Yes. It’s possible to mock only what we need to. Let’s see how it’s done.
Create a new mock file src/__mocks__ /react-router-dom.js. Now paste in the following code:
By now you should have noticed that when mocking a module we have to use the exact module name as the mock file name.
Here, we use the module.exports syntax because react-router-dom has mostly named exports. (I haven’t come across any default export since I’ve been working with it. If there are any, kindly share with me in the comments). This is unlike Axios where everything is bundled as methods in one default export.
We first spread the actual react-router-dom, then replace the useParams hook with a Jest function. Since this function is a Jest function, we can modify it anytime we want. Keep in mind that we’re only mocking the part we need to because if we mock everything, we’ll lose the implementation of MemoryHistory which is used in our render function.
Let’s start testing!
Now create src/TodoItem.test.js and enter the below content:
import React from "react";
import axios from "axios";
import { render, screen, waitForElementToBeRemoved } from "./custom-render";
import { useParams, MemoryRouter } from "react-router-dom";
import { TodoItem } from "./TodoItem";
describe("<TodoItem />", () => {
it("can tell mocked from unmocked functions", () => {
expect(jest.isMockFunction(useParams)).toBe(true);
expect(jest.isMockFunction(MemoryRouter)).toBe(false);
});
});
Just like before, we have all our imports. The describe block then follows. Our first case is only there as a demonstration that we’re only mocking what we need to. Jest’s isMockFunction can tell whether a function is mocked or not. Both expectations pass, confirming the fact that we have a mock where we want it.
Add the below test case for when a to-do item has been completed.
it("Renders <TodoItem /> correctly for a completed item", async () => {
useParams.mockReturnValue({ id: 1 });
render(<TodoItem />);
await waitForElementToBeRemoved(() =>
screen.getByText(/Fetching todo item 1/i)
);
expect(axios.get).toHaveBeenCalledTimes(1);
expect(screen.getByText(/todo item 1/)).toBeInTheDocument();
expect(screen.getByText(/Added by: 1/)).toBeInTheDocument();
expect(
screen.getByText(/This item has been completed/)
).toBeInTheDocument();
});
The very first thing we do is to mock the return value of useParams. We want it to return an object with an id property, having a value of 1. When this is parsed in the component, we end up with the following URL https://jsonplaceholder.typicode.com/todos/1. Keep in mind that we have to add a case for this URL in our Axios mock or it will throw an error. We will do that in just a moment.
We now know for sure that calling useParams() will return the object { id: 1 } which makes this test case predictable.
As with previous tests, we wait for the loading indicator, Fetching todo item 1 to be removed from the screen before making our expectations. We expect to see the to-do title, the id of the user who added it, and a message indicating the status.
Open src/__mocks__/axios.js and add the following case to the switch block.
When this URL is matched, a promise with a completed to-do is returned. Of course, this test case fails since we’re yet to implement the component logic. Go ahead and add a test case for when the to-do item has not been completed.
it("Renders <TodoItem /> correctly for an uncompleted item", async () => {
useParams.mockReturnValue({ id: 2 });
render(<TodoItem />);
await waitForElementToBeRemoved(() =>
screen.getByText(/Fetching todo item 2/i)
);
expect(axios.get).toHaveBeenCalledTimes(2);
expect(screen.getByText(/todo item 2/)).toBeInTheDocument();
expect(screen.getByText(/Added by: 2/)).toBeInTheDocument();
expect(
screen.getByText(/This item is yet to be completed/)
).toBeInTheDocument();
});
This is the same as the previous case. The only difference is the ID of the to-do, the userId, and the completion status. When we enter the component, we’ll need to make an API call to the URL https://jsonplaceholder.typicode.com/todos/2. Go ahead and add a matching case statement to the switch block of our Axios mock.
As with the component, we import AppContext. We read activeTodoItem from it, then we read the to-do title, userId, and completion status. After that we make the API call inside a useEffect block. When the API call returns we set the to-do in state by firing the LOAD_SINGLE_TODO action. Finally, we set our loading state to false to reveal the to-do details.
Let’s add the final piece of code inside the return div:
{loading ? (
<p>Fetching todo item {id}</p>
) : (
<div>
<h2 className="todo-title">{title}</h2>
<h4>Added by: {userId}</h4>
{completed ? (
<p className="completed">This item has been completed</p>
) : (
<p className="not-completed">This item is yet to be completed</p>
)}
</div>
)}
Once this is done all tests should now pass. Yay! We have another winner.
Our component tests now pass. But we still haven’t added it to our main app. Let’s do that.
Open src/App.js and add the import line:
import { TodoItem } from './TodoItem'
Add the TodoItem route above the TodoList route. Be sure to preserve the order shown below.
# preserve this order
<Route path="/item/:id" component={TodoItem} />
<Route exact path="/" component={TodoList} />
Open your project in your browser and click on a to-do. Does it take you to the to-do page? Of course, it does. Good job.
In case you’re having any problem, you can check out my code at this point from the 04-test-todo branch.
Phew! This has been a marathon. But bear with me. There’s one last point I’d like us to touch. Let’s quickly have a test case for when a user visits our app, and then proceed to click on a to-do link. This is a functional test to mimic how our app should work. In practice, this is all the testing we need to be done for this app. It ticks every box in our app specification.
Open App.test.js and add a new test case. The code is a bit long so we’ll add it in two steps.
import userEvent from "@testing-library/user-event";
import { todos } from "./makeTodos";
jest.mock("react-router-dom", () => ({
...jest.requireActual("react-router-dom"),
}));
describe("<App />"
...
// previous test case
...
it("Renders todos, and I can click to view a todo item", async () => {
render(<App />);
await waitForElementToBeRemoved(() => screen.getByText(/Fetching todos/i));
todos.slice(0, 15).forEach((td) => {
expect(screen.getByText(td.title)).toBeInTheDocument();
});
// click on a todo item and test the result
const { id, title, completed, userId } = todos[0];
axios.get.mockImplementationOnce(() =>
Promise.resolve({
data: { id, title, userId, completed },
})
);
userEvent.click(screen.getByTestId(String(id)));
await waitForElementToBeRemoved(() =>
screen.getByText(`Fetching todo item ${String(id)}`)
);
// next code block goes here
});
});
We have two imports of which userEvent is new. According to the docs,
“user-event is a companion library for the React Testing Library that provides a more advanced simulation of browser interactions than the built-in fireEvent method.”
Yes. There is a fireEvent method for simulating user events. But userEvent is what you want to be using henceforth.
Before we start the testing process, we need to restore the original useParams hooks. This is necessary since we want to test actual behavior, so we should mock as little as possible. Jest provides us with requireActual method which returns the original react-router-dom module.
Note that we must do this before we enter the describe block, otherwise, Jest would ignore it. It states in the documentation that requireActual:
“…returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not.”
Once this is done, Jest bypasses every other check and ignores the mocked version of the react-router-dom.
As usual, we render the component and wait for the Fetching todos loading indicator to disappear from the screen. We then check for the presence of the first 15 to-do items on the page.
Once we’re satisfied with that, we grab the first item in our to-do list. To prevent any chance of a URL collision with our global Axios mock, we override the global mock with Jest’s mockImplementationOnce. This mocked value is valid for one call to the Axios get method. We then grab a link by its data-testid attribute and fire a user click event on that link. Then we wait for the loading indicator for the single to-do page to disappear from the screen.
Now finish the test by adding the below expectations in the position indicated.
expect(screen.getByText(title)).toBeInTheDocument();
expect(screen.getByText(`Added by: ${userId}`)).toBeInTheDocument();
switch (completed) {
case true:
expect(
screen.getByText(/This item has been completed/)
).toBeInTheDocument();
break;
case false:
expect(
screen.getByText(/This item is yet to be completed/)
).toBeInTheDocument();
break;
default:
throw new Error("No match");
}
We expect to see the to-do title and the user who added it. Finally, since we can’t be sure about the to-do status, we create a switch block to handle both cases. If a match is not found we throw an error.
You should have 6 passing tests and a functional app at this point. In case you’re having trouble, the corresponding branch in my repo is 05-test-user-action.
Conclusion
Phew! That was some marathon. If you made it to this point, congratulations. You now have almost all you need to write tests for your React apps. I strongly advise that you read CRA’s testing docs and RTL’s documentation. Overall both are relatively short and direct.
I strongly encourage you to start writing tests for your React apps, no matter how small. Even if it’s just smoke tests to make sure your components render. You can incrementally add more test cases over time.
By this time, you might have heard of many small retail businesses going online amid this Covid-19 pandemic while many big brands are making use of market segmentation to the full extent to reach their customers.
However, many small business owners are still not aware of how to make the most of customer segmentation and behaviour analysis to their benefit as well as to offer a great customer experience.
This piece of writing will explain how customer segmentation and behaviour analysis can help e-commerce businesses to drive growth by reaching potential customers.
Before moving onto discussing customer segmentation and behaviour analysis, let’s have a quick look at the history and evolution of e-commerce over the years.
History of E-commerce
By definition, E-commerce means buying or selling of any products and services via the internet. According to Wikipedia, online shopping was invented by Michael Aldrich back in 1979.
However, online shopping only became possible when the internet was made available to the public. Amazon was one of the first e-commerce sites that began selling products online in the US. Since then, e-commerce has revolutionised the retail and supply chain industries.
The convenience offered by online shopping has been a significant factor that has helped e-commerce to grow at an unprecedented rate. At present the market is flooded with lots of e-commerce websites ranging from small to big brands. Online shopping has influenced us in such a way that a world without e-commerce is unimaginable.
Why There is a Sudden Increase in Demand for E-commerce?
While the pandemic has hard hit all the sectors, the e-commerce industry is witnessing an unexpected increase in demand. The interesting fact is that many small scale e-commerce websites, especially those providing home essentials, health and wellness products have been witnessing a massive increase in their website traffic recently. It seems the spread of COVID-19 has changed the way consumers buy things. Consumers are now turning to online shopping during this crisis, thus creating new opportunities for many online retailers.
This change in consumer behaviour was gradually happening, but the subsequent lockdown and social distancing due to Covid-19 have expedited this change. Many experts believe that this change in consumer behaviour is expected to stay even after everything goes back to normal. Realising this fact, many offline retailers have already started moving their business online.
But the problem is, many of these online retailers don’t have a clear cut idea about who their customers are and how to target them. Even customer segmentation up to a small level can benefit their business in many ways.
What is Customer Segmentation?
Customer segmentation, in short, is the idea of splitting up your customers to separate small groups based on many factors such as age, shopping habits, geography, gender, interests, etc. By splitting customers into separate groups, brands can individually target each group of customers, with various marketing strategies, thus ensuring better reach and customer satisfaction.
For easy understanding, let’s take an example of an e-commerce store primarily dealing in online clothes sales. As far as an online cloth store is considered, their customers are people who are planning to purchase clothes from them. It can be people of different age groups, interests, etc. Each group of customers will have their own needs and desires.
If the same marketing techniques are used on all these different groups of customers, it may only work on some of them and lead to wastage of valuable time and resources of the company. Instead, the cloth store can provide a personalized experience to their customers by segmenting them and targeting each group of customers with different offers based on their interests. Such marketing strategies can help businesses to attract their customers.
Different Types of Customer Segmentation
Customer segmentation allows brands to target a specific group of customers and offer tailored marketing strategies. Targeting customers based on their unique characteristics help to increase sales, revenue and customer satisfaction.
Four types of customer segmentation exist, and they are as follows,
Demographic Segmentation – Demographic Segmentation is one of the most common types of customer segmentation in which the customers are segmented based on various demographic data such as age, gender, occupation, etc. Businesses can later use this demographic information to carry out targeted campaigns.
Behavioural Segmentation – In simple terms, behavioural segmentation is the process of grouping customers based on their buying behaviour. In behavioural segmentation customer buying patterns, such as the buying frequency, brand loyalty and much more are taken into consideration while grouping the customers. Behavioural segmentation of customers can help brands to identify customers with similar behaviour. Customers who are more loyal towards your brand can be given extra care which in turn results in the creation of a loyal customer base. Loyal customers always hold the key to your business success.
Geographic Segmentation – Customers are divided into separate groups based on their geographic borders. Country, state, region, climate are some of the factors based on which customers get grouped. Such kind of segmentation is useful for businesses such as those involved in the sale of winter clothes. With geographic segmentation, they can easily target people living in the snowy region and avoid people living in warm weather conditions.
Psychographic Segmentation – Customers are grouped based on factors that relate to their personalities and characteristics. Their lifestyles, personality traits, etc. are considered while grouping customers.
Impact of customer segmentation
To achieve success in your business, you need to provide better service to your customers. Customer segmentation is one way in which you can accomplish that. Now let’s move onto discussing the various benefits of customer segmentation for an e-commerce business.
Allows targeted marketing Businesses selling a single product to everyone seem to be an unrealistic approach. With customer segmentation e-commerce businesses can identify a specific group of people who are more likely to buy their products. This group of people is considered as the target market, and e-commerce businesses can target these groups of people specifically by making use of various marketing strategies such as digital ads, special discount offers and coupons, etc.
Better lead conversion No matter what line of business you are in, the success of your business comes when you are able to convert your leads successfully. With lead segmentation, you can have separate lists of your website users based on their actions. People who have previously interacted with any of your product pages from the website can be grouped to one list. On the other hand, users who visited the website homepage only without interacting with any of your product pages can be grouped into another list. With the necessary data available, business owners can use targeted marketing techniques to bring back the users to their website, thus increasing the chance of getting them converted.
Stay ahead of competitors The e-commerce industry is growing at the fastest pace. As the competition increases in the e-commerce field, many businesses are finding themselves competing with lots of other brands. To stay ahead, businesses need to come with a strategy by which they can engage with their customers and remain relevant. With customer segmentation being able to provide valuable insights about customers, e-commerce businesses can successfully break into the market and stay ahead of their competitors.
Improved customer satisfaction and loyalty As mentioned in the above points, customer segmentation helps businesses to do targeted marketing campaigns. Targeted marketing helps in promoting products and services that the customer needs, resulting in better-personalized shopping experience. Several studies have shown that offering a personalized customer experience holds the key to improving customer loyalty and satisfaction. A loyal customer is more likely to share their experience with other customers leading to a further increase in sales and revenue as well.
Customer retention Customer segmentation enables marketers to identify groups of people that need extra care and attention. By identifying such a group of people, marketers can plan various marketing techniques to keep them engaged and create a positive experience for them. Such kinds of actions can lead to an increase in customer retention since they feel more attached to your brand.
The Future
In today’s world expectations of the customers are very high, and businesses have to keep pace with these growing demands and expectations. Due to this factor, many e-commerce companies feel the need to adopt new strategies that can help them in offering better customer experience.
Customer segmentation is a crucial tool for all the businesses; however, to meet the growing needs of the customers’, companies have to come with a more advanced strategy rather than sticking with the traditional segmentation methods.
Many experts believe that in the coming years, we will see an increase in the role of AI in customer segmentation. Using AI to segment your customers offers a lot of benefits for your business. Let’s take a look at some of the benefits of using AI instead of manual segmentation.
Finds hidden insights in the data, which is difficult for a human to identify.
Speedy insights, ability to take quick decisions and make precise predictions.
With the changing needs of the customers, AI helps to create dynamic versions of segmentation.
Enables businesses to provide a higher level of personalized customer experience
Wrapping Up
After going through this blog, you might have got an idea about customer segmentation and its benefits. As we mentioned before, customer segmentation allows you to divide your customers into separate groups based on their interests, behaviour, spending habits, etc.
One thing you should remember is the fact that customer segmentation should be done very carefully as your whole e-commerce marketing plan depends on the data you collect.
Web developers have been the bedrock of any company’s business strategy for some time, and the industry is continuing to thrive and grow at a rapid pace. This is why it’s surprising that it is so lacklustre when it comes to diversity.
A recent study revealed 80% of those in the design industry are male, and more specifically 79% within the field of web design. According to WISE, just 23% of the people working in STEM roles (Science, Technology, Engineering and Maths) are female and women currently account for just 15.8% of the UK’s current generation of engineering and technology graduates.
Why the Lack of Diversity in Web Design?
The main reason for this, as cited by the Organisation for Economic Co-operation and Development (OECD) found that women still lack the confidence to pursue these careers, despite their school results being as good as (or better) than their male counterparts. Research has found that the professional and technical services sector has the fourth-highest gender pay gap of all UK industries. If more women were to join these higher-paid sectors it could help reduce the gender pay gap as a whole, as well as help female economic empowerment.
This division is seen in ethnic minority groups too. The numbers for BAME (Black, Asian, Minority Ethnic) employees in the British tech industry are unknown but is estimated by the British Computer Society to be at 1-2%, a ridiculously low number in this day and age. This is why groups and organisations are cropping up designed to promote an industry that reflects all of society rather than one part of it. Here are some of the organisations to pay attention to who are bridging the diversity gaps in web design.
Girls Who Code
Girls Who Code are working to create opportunities for women within tech, aiming to deepen their computer science skills and confidence. They run a range of programs designed to equip women with the necessary computing skills to pursue opportunities in the field and to give chances that are often shunned due to society. Founder Saujani states that women are socialized to seek perfection, and this is something that needs to be overcome. One way to break that mentality at an early age, she says, is coding:
[Girls] walk into these classrooms and they feel like they will never be good at it, and when they learn how to create something, whether it’s a website or app, it changes their mindset and they stop giving up
Adobe Design Circle
Adobe Design Circle is another initiative aiming to introduce all members of society to design. They want to create more visibility for design as a viable career path for anyone that might be considering it, and to help with youth entering the field. This is opening the opportunities of working in tech and web to aspiring designers at a young age who aren’t necessarily yet conditioned by the pressures of society and showing them it can be a realistic career path.
They have their own scholarships and mentoring initiative to support these goals too. The faces behind the team of Adobe Design Circle range through multiple ethnicities and have a fairly even male-female divide. This equal representation alone is inspiring. One of Adobe’s core missions is to offer youth the opportunity to learn and express themselves through creativity and technology, regardless of their economic or cultural backgrounds. With this they specifically encourage applicants of all backgrounds to apply and offer many other opportunities from mentoring to internships.
Ladies that UX
Ladies that UX are a collaborative community of women in UX aiming to “support each other, push the UX boundaries and promote female skill and talent.” It is a European-based initiative where each city involved runs slightly different events and groups decide together what they would like to get from their meetups. They assist each other with UX challenges, discuss topics, and brainstorm ideas. Ladies that UX was created in 2013 by Georgie Bottomley and Lizzie Dyson with the aim of bringing together women in the industry, offering support and creating connections around the world.
Xuntos
Xuntos is aiming to create the largest community of ambitious and talented individuals from under-represented groups in the technology industry. It works to nurture university students and recent graduates that are often overlooked in the tech industry by the means of educational workshops, university hubs, events and an active community. The very name “Xuntos” is a Galician word which means “together” and this is their most important factor. They want people to realise they are not alone and just because the representation isn’t there, doesn’t mean their capabilities aren’t.
Colorintech
Colorintech is a non-profit organisation that was founded in 2016. It aims to close the gap and shorten the learning curve, with a strong community designed to help each other. The company was founded by Silicon Valley tech executive Dion McKenzie and ex-Googler Ashleigh Ainsley after they became frustrated at the few black individuals in the field. Since its inception 30,000 students, professionals, volunteers and tech companies have been impacted by their work, and over 450 minorities graduated from their programs in 2019 alone.
UKBlackTech
UKBlackTech are on a mission to create the most diverse tech sector in the world. Their aim is to encourage more ethnic minorities to enter the UK’s technology workforce and make an impact. To help with this, they design and implement different initiatives to help them get employed and retain employment, put on bespoke events that target aspects such as specific job roles or tech topics and promote different opportunities for members to apply to.
Witty Careers
Witty Careers was created with the aim to support women from black and ethnic minority backgrounds in the UK and equip them with the skills to build a career in the tech industry. They run different practical skills workshops and events which in the past have included visits to a Microsoft store, Uber, and Pivotal. They open doors for communications, networking and future career prospects for those in the minority. They also have a handy range of resources designed to help you get into the career you want. From CV writing advice to industry insights, they are all free of charge.
Puppeteer is an Node library for spinning up a copy of Chrome “headlessly” (i.e. no UI) and controlling it. People use it for stuff like taking a screenshot of a website or running integration tests. You can even run it in a Lambda.
Another use case is running synthetic (i.e. not based on real-users) performance tests, like some of these new Web Core Vitals
Addy Osmani lists out a bunch of these “recipes” for measuring certain performance things in Puppeteer. These would be super useful as part of a build process alongside other tests. Did the unit tests pass? Did the integration tests pass? Did the accessibility tests pass? Did the performance metrics tests pass?
BrowserStack released a thing to measure your site and give you a performance score.
You get the tests back super quick which is cool. I can see how tools like this are good for starting conversations with teams about improving performance.
But… that number seems a little weird. They don’t exactly document how it’s calculated, but it seems to be based on stuff like Time to First Byte (TTFB) and the page load event, which aren’t particularly useful performance metrics.
It’s not bad that this tool exists or anything, but I don’t think it’s for practitioners doing performance work.
Karolina Szczur from Calibre documents some common team struggles like, for example, having a team be able to identify real issues from variability noise.
Many people from different backgrounds can view performance dashboards. Not knowing what constitutes a meaningful change that needs investigation can result in false positives, lack of trust in monitoring and cycles spent looking for reasons for performance regressions or upgrades that aren’t there.
50ms. That’s how long until any particular JavaScript task starts affecting user experience. Might as well track and (ideally) fix them.
When the browser’s main thread hits max CPU for more than 50ms, a user starts to notice that their clicks are delayed and that scrolling the page has become janky and unresponsive. Batteries drain faster. People rage click or go elsewhere.
We expect a line to break when the text on that line reaches the parent box boundaries. We see this every time we create a paragraph, just like this one. When the parent box doesn’t have enough room for the next word in a line, it breaks it and moves down to the next line and repeats that process.
Well, that’s how it works when words are separated by spaces or other whitespace. As far as CSS goes, there are five (!) properties that can possibly affect how and when a line breaks. Let’s not get into all that again though. Let’s instead look at a situation where it seems like a line is going to break but it doesn’t as an excuse to learn a little something about line breaking.
What happens in a situation where there is no way for the browser to know when it’s OK to make a break?
Let’s get ourselves into a bad situation with a “tag list” and then get ourselves out of it. Here’s our markup:
<ul>
<li>PHP</li>
<li>JavaScript</li>
<li>Rust</li>
<!-- etc. -->
</ul>
Next, we’ll apply CSS that overwrites the default list style from its default vertical orientation to horizontal by making the list items display inline.
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline;
padding-right: 5px;
}
CodePen Embed Fallback
The list looks just like we want it. I added a little bit of space between one list item and another, so it doesn’t look too crowded.
Now let’s introduce a wrapper element to the mix. That’s essentially a div around the unordered list. We can give it a class, say, .tags.
Let’s say we want to give the wrapper a fixed width of 200px. That’s where we should expect to see line breaks happen as the unordered list bumps into wrapper’s boundaries.
.tags {
width: 200px;
}
CodePen Embed Fallback
Here comes the interesting part. Many people use minifiers in their build process to reduce file sizes by getting rid of unnecessary values. Some of these values are whitespaces, which includes spaces, tabs, and line breaks (such as carriage return and line feed) characters that are use for formatting purposes but considered by minifies to be irrelevant to the final result.
If we “minify” our HTML by removing new lines, then this is what we get:
UH OH. As you can see, the list is not breaking at the 200px boundary anymore. Why? What is different now? Personally, I thought HTML didn’t care about whitespaces. What is so different about the minified version from the original markup?
The browser does actually care about whitespaces… but only sometimes. And this just so happens to be one of those instances. When the page is being parsed, the parser sees this list as one long word because, from its perspective, there are no characters that differentiate one from the other.
One might think having the padding is affecting things. But if we remove the padding from our list items we still get the same result… only with no spacing between items.
CodePen Embed Fallback
The browser sees the entire list as a single word.
We can get natural line breaks from special characters
Besides spaces, excluding non-breaking spaces ( ), there are some other characters that will force a line break, including:
After hypen (?)
After en dash (–)
Before and after em dash (—)
After question mark (?)
Zero-width white space (U+200B or )
These line breaks happen at rendering time which means the browser still sees this as one long word. Adding a new list item to the tag list with any of these characters will force a line break. Let’s add “Objective-C” to the list. Its name contains a hyphen, which we can use to see how it affects things.
For better readability purpose the code code will have indentation and new line.
That’s good. Let’s look at three solutions to our non-line-breaking list along these lines.
Solution 1: Add one of the breaking characters
We can keep forcing line breaks with those breaking characters like we just did. But remember, if you are using a minifier, adding the spaces in or after the closing tag won’t guaranteed it won’t be removed, as not all minifiers work the same way.
The breaking character can also be added using the ::before and ::after pseudo-elements in CSS. What makes this solution effective is that it’s not affected by an HTML minifier because the whitespace is added when the CSS is applied.
But, before we move on, let’s talk a moment about collapsing whitespaces.
The browser collapses whitespace before and after a character that forces a line break inside inline elements. With this in mind, there’s a little trick to using ::after and the content property with whitespacing and display: inline-block. The inline-block element adds a breaking character at the end of the text. Then the content property space comes after the breaking character created by the inline-block element, which results in the space being removed at rendering time. That is, unless the white-space property is set to pre.
CodePen Embed Fallback
Solution 3: Use inline-block instead
Perhaps you have bumped into a fight with space between inline-block elements in CSS before. We can use the inline-block value on the display property to force a line break because the inline-block element already has the extra whitespace we need. This works similar to adding a zero-width space character, but the list items will have no visual separation.
CodePen Embed Fallback
Solution 4: Use flex or inline-flex
Another solution is to define the unordered list as a flex container, which allows us to use flex-flow to set the direction of the list and to make sure it to multiple lines when needed.
We can also turn to the display: inline-flex instead of inline-block solution. The idea here is that the entire flexible container display inline.
So, we started this post with a situation that might come up when using a minifier. That said, minifiers — and many libraries for that matter — are smart and will try to prevent this line-breaking issue from happening.
Sure, it’s not an extremely common situation to bump into. It’s really one of those things that can fly under the radar if we’re not paying attention but, if it does happen, at least we know there are ways to work around it.
A graphic designer is a highly-demanding profession that requires not only a wide array of skills and vast expertise but also thinking ahead and breaking the rules.
Even veterans must continuously upgrade their skills and expand their knowledge to stay on top of the game. To be able to do that, they keep tabs on modern trends that delight their clients. After all, the design is the top driver of web and mobile users’ positive first impressions. Considering this, graphic designers’ work is essential for a fruitful online presence. With 1.7 billion active websites of competitors, every single pixel matters.
What popular trends are going out of style in graphic design?
Strong and complex gradients
Over the course of the last few years, we have seen a trend of using very sophisticated and robust gradients. This design theme was very prominent across the globe, with the big brands like Instagram, Tinder for example, and as a part of smaller interface elements (buttons on Asana brand applications). In my honest opinion, this trend is transforming into a less aggressive color selection and fewer colors used in gradient in general. This is by no means a suggestion that we will not see any gradients used at all, but some of the applications will evolve into different approaches like the use of holographic patterns.
Isometric design
Isometric perspective in design is a trend that comes and goes. It was a very prominent way to approach the topic of illustrations and iconography in web and mobile interfaces over the last few years. Isometric design often feels more technical and stiff than the current trend of a more “humane” way to present illustrations with a lot of sketch and abstract silhouettes and proportions. This trend will remain to be seen, but we think that it will be used in more specific cases and mainly for a very technical field of design because it’s a relatively easy way to show a product from a wide-angle and perspective on a single image.
Outlined typography
Outlined typography creates a unique visual effect for typography, but it can very often collide with the User Experience. We want to make sure that the app you are using is easy to use and navigate, content blocks are visually appealing. This can be easily ruined with a part of a design that has a crucial meaning to users, and a pixel-wide outline mixed with a low contrasting color can turn that into an almost invisible object. Outlined typography is one of the most concerning parts of typography when looking at components with the simple “UX Squint Test.” If your brand revolves around an outlined typography, a small object that uses this technique will be almost impossible to see if you try to look at it with a squint eye. This is a clear indication of a problem for users across various devices.
Strict grid structure
We are all used to ensuring that everything is perfectly aligned with Grid, fits the proper column with a tidy, pixel-perfect gutter in between. With the ever-improving front-end capabilities of various code languages & frameworks that allow for easier implementation of more fancy and imaginative interfaces, we are finally able to create a more asymmetrical layout. This is by no means a way to do a „chaotic” design and still requires a lot of practice to get right, but we should see way more unorthodox designs in the near future.
Stiff, technical copywriting
Web and mobile apps are finally changing the very technical, overcomplicated headers and descriptions. With the increasing number of major brands that are more aware of the importance of good copywriting can bring, microcopy rises in power. With the right approach, you can push the same information to your beloved user base without needing some (or most of them) to check the dictionary. Microcopy with a more relaxed tone, clear description of values is by far one of the most welcome changes to what’s going on in copywriting and design in general.
What cliches inexperienced graphic designers overuse?
Overuse of color
If the app you are designing has a single primary color, you should not add three, four, or more colors to the used palette. We know that it’s tempting, but keep in mind that brand awareness should be a big part of a design planning process. If the app you have designed will see mostly green color, but the client brand is strictly using blue, it could lead to confusion if the app belongs to the same band.
In addition, as we said in the previous section, we think that a lot of designers treat gradients as an easy way to make the interface look more advanced than it would look like with a solid set of colors. We still tend to use gradients, depending on the app – but if you can achieve your design work with the basic set of colors, you should be able to resist the use of gradients.
Mixing outlined and filled icons at random
It might be a bit nitpicky, but this is a common sight in a lot of early designer portfolios, where you can see a set of 3-4 navigation icons and one of them – often the least important from a User perspective – is filled and appears bolder, while the rest is a less intrusive outline styled. It’s a common practice in design to stick to one style, or apply an outlined icon for inactive and filled with the active state (for example heart or bookmark icons)
Breaking design principles “just because”
Since we have had access to tools and resources to design, Designers always wanted to experiment with the various components of user interface design. This is an essential part of making your style and a unique product in general, but some things are better done the way we are common with. So you should not really over experiment with the Checkbox, to replace a checkmark with a Triangle, or make a triangle button. This often leads to confusion and a drastic drop in readability and user experience for the sake of making a change.
For your next digital product choose experts who will create a neat and responsive UX design by not only keeping up with the newest trends, but also by anticipating them and broadening the horizons through turning to modern art, architecture, and even traditional fashion.
Though it may not seem like an obvious choice, a landing page — or two or three — can help generate leads and grow your business. A landing page is a web page with a singular focus: to convert website visitors into leads. When visitors click on a link from an ad or a post on social media, they go to a landing page that describes what the offer in the ad or post is and what they need to do to get it.
If they’re designed well, landing pages can drive conversions at a higher rate than your website’s homepage. The median conversion rate from a landing page is between 3 and 5.5 percent, compared to the average e-commerce conversion rate of 2.9 percent.
The beauty of a landing page is its simplicity. It targets visitors who are interested in one specific thing (like an e-book or a free trial) and gives them clear directions on how to get it. Most landing pages include text, pictures, and a call to action (CTA) to get visitors to convert.
Landing pages offer a few major benefits, but one of the biggest is their ability to capture leads. For example, a landing page to download an e-book might require a person to fill out a contact form before getting access to the e-book. Once the visitor downloads the e-book, the company can reach out later and see if the visitor has any questions or needs more information — effectively pulling them into the sales funnel.
Your company should have at least a few landing pages on your website to optimize lead generation. In this guide, you’ll learn
Why you need landing pages
How to create the right landing page strategy
How to use landing pages
How to optimize and track landing page performance
How landing pages for apps and mobile sites differ
Things to avoid in your landing pages
How JotForm can improve and streamline your landing pages
Why you need landing pages
Since the sole purpose of a landing page is to convert visitors into leads or customers, it’s very different from the standard web pages on your site. Your “About” page, product pages, and homepage all have navigation options so that visitors can click around your site.
For example, a visitor may land on a blog post, then navigate to a product page, and finally check out your “About” page to learn more about the brand. A landing page doesn’t have that — it’s a standalone page without the distraction of navigation, and it exists for the main purpose of converting visitors into leads.
Theoretically, you could send someone to a standard page on your website from an advertising or social media campaign. But you can’t rely on regular web pages to convert visitors into leads. They’re often too general and not geared toward the visitor’s intent. Without a direct and obvious next step, the visitor will likely end up visiting a few pages on the website and eventually leaving without completing an action.
If the goal for your website is to convert leads into customers, landing pages are an effective way to do this. They have content that’s targeted toward specific products or offers, which makes them more relevant to the visitors who land there.
More relevant content and more targeted traffic translates into higher conversions. That’s good news for your sales team, as HubSpot’s 2018 State of Inbound Marketing report found that 75 percent of North America-based sales teams list closing more deals as a top priority. Leads that have already expressed interest in your products and services can go a long way toward hitting those sales goals.
Landing pages also provide a way to test how to improve conversions. You can put up different landing pages with different layouts and content to see which one actually gets people to sign up, download an e-book, or buy your product. This can help you figure out what elements (such as images, content, and layout) will work best for you. You’ll learn more about landing page optimization — including testing — later in this guide.
Make onboarding easier with landing pages
Landing pages are most often associated with advertising campaigns, but they can also be used for other functions, such as user onboarding. The goal of user onboarding is to introduce users to a new product and explain how it works. A typical onboarding process takes a user through the signup, the product tour and tutorial, and finally turns them loose to start trying the features.
When you onboard new users for your product, like a new application or software product, you want them to immediately find value so that they’ll keep using the product and paying for their subscription. Right out of the gate, a good landing page can set the tone for the relationship and let the user know what to expect.
If your onboarding landing page is targeted, user-friendly, and streamlined, the user will be more likely to use more of the product’s features and become a long-term customer.
Landing pages can also be part of the product tour of an app or software product. The text and imagery on a landing page can provide a preview of what the user can expect after signing up.
After signup, the landing page can segue directly into the app, using similar imagery to reassure the user that they’re in the right place. The onboarding sequence can continue, showing the user how to customize the app to their preferences and get started with it.
For example, a landing page for a website builder might promise that it’s easy to set up the website and, therefore, show images of the user interface. After signup, the user would be taken into a tutorial with popup guides that show them how to choose a website template, add images, and add text to their websites.
Landing pages improve lead generation
All companies want to close more deals and boost sales. To do that, they need a consistent stream of new leads that can be moved down the sales funnel. Landing pages play a critical role in the lead generation process by capturing website visitors’ information and converting them into leads who can be contacted by the sales team.
You can also use landing pages to help your sales team upsell, and make their jobs a whole lot easier. Landing pages optimize the lead generation process because they take visitors to pages tailored to their specific interests and intent.
For example, a T-shirt maker could run ads promoting a new line of kids’ T-shirts, and users who clicked on that ad would go to a landing page where they would see only information about the company’s line of children’s products.
Once visitors complete an action — such as filling out a web form — a salesperson or customer service rep will know what types of products each visitor is interested in. They can then tailor their sales pitch or messaging to better meet each lead’s expectations. Salespeople can also provide targeted educational or product information, like case studies, to help persuade each prospect to become a customer. This gives your sales team an edge and can help them improve their close rates.
Landing pages aren’t a “nice-to-have” part of your marketing campaign — they’re a “must-have.” But where should you start with your landing pages, and how do you create them?
In the next section, you’ll learn how to lay the foundation for a strong landing page by identifying your target audience and choosing the right landing page builder. You’ll also learn about calls to action and how to use them effectively on your landing pages.
Where to start with landing pages
The goal of a landing page isn’t to get as much traffic as possible — it’s to attract the visitors who are most likely to convert, whether that means they’re making a purchase or handing over contact information in exchange for a discount or useful piece of content.
But before you start driving targeted visitors to your landing pages, you first need to know who your target audience is and why they’d want to take that action.
To do this, you need to research your target audience and what motivates them. Start by looking at the following audience characteristics in your existing website analytics platform (like Google Analytics), social analytics platforms (like Facebook Analytics), and even your e-commerce platform analytics:
Demographics. Age, gender, location, and income all fall into the category of demographics. When creating a landing page offer, the content and imagery you’d use for a 55-year-old male are much different than what you’d use for a 22-year-old female.
Psychographics. Psychographics is the study of personality traits, lifestyle characteristics, aspirations, opinions, and interests of certain groups of people. They help companies understand the triggers that push a customer to buy.
Where they spend time online. Your visitors may spend most of their time reading blogs, searching for information on Google, or checking out social media ads. With this information, you can tailor the content, design, and layout of your landing page to look and feel similar to the channels where your visitors spend the most time.
Design preferences. If you’re selling a visual product or service, consider the types of graphics and visuals your customers respond to best. For example, if you’re offering a free trial of a software product, screenshots can be an effective way to show your audience what they’ll get after signing up.
Cultural preferences. If you’re marketing your product to a global audience, think about the types of design, content, and even colors that would appeal to different cultures and nationalities. For example, if your ideal audience is Chinese, you may want to feature colors that are viewed positively, like red.
Accessibility requirements. Regardless of the demographics and psychographics of your ideal audience, your landing pages need to be accessible to those with disabilities. Some of these standards include providing text for all non-text content so it can be turned into large print, braille, or speech; making sure color isn’t the only visual being used to convey information; and allowing text to be resized up to 200 percent without losing functionality.
Finding the right landing page builder
Once you better understand your target audience and what they’re looking for, you can begin to sketch out what your landing page will look like.
This is where landing page builders comes in handy — they allow you to choose from different templates so that you won’t have to code a web page or add a page to your website’s standard content management system. Instead, the landing page builder will do this for you.
A good landing page builder should include
A wizard that lets you easily build your landing page without needing to code anything
Templates you can easily modify to match your existing website branding
Tools to add long-form text, images, or other design elements to your landing page
A call-to-action button to encourage landing page visitors to perform an action or conversion
A form or form integration where visitors can sign up to get more information
A way to customize the domain name for your site
Analytics that track the performance of your landing pages
Testing options that let you run A/B tests and multivariate tests
When choosing from the many different landing page builders available, make sure you can easily customize anything you create to suit the look and feel of your website. Using readymade templates can help speed up this process, but you’ll still need to add your own images and visuals, and change fonts and colors.
If the purpose of your landing page is to capture leads, you’ll need a form or form integration that allows you to do that. You’ll also need a way to send the data you collect straight to the database you’re using. For example, if you’re already using JotForm to collect data and have integrated it with your CRM system or other third-party applications, it may make more sense to look at landing page builders that allow easy integration with JotForm.
Selecting a landing page template
Be sure to choose a landing page template that will best convert visitors based on the offer on your landing page. Regardless of which template you choose, make sure it has a responsive design — meaning it works well on mobile devices as well as desktop computers.
Beyond that, think about how you’ll use your landing page. Will visitors be downloading an e-book, going through an app setup process, or something else? The function of your landing page will help decide which design elements to prioritize. For example, a landing page to download an e-book will likely use just one image, versus a landing page for an app, which will have more screenshots and other visuals.
Work on crafting the right ask or offer to persuade your visitors to act. When you create content for your target audience, whether it’s a blog post or an ad, the goal is to develop messaging that gets readers to convert, such as signing up for a newsletter or making a purchase.
Also, look at loading speed for the landing page. While a landing page that promotes a highly visual product will need lots of high-resolution images, you don’t want visitors to get bored while waiting for images or videos to load. Your template should be optimized for a fast load time to keep visitors on your page.
There are several types of landing pages to choose from:
A squeeze page is often a top-of-the-funnel page that is created solely to capture your visitor’s email address. The page has no exit hyperlinks, and the content and layout are focused only on converting the visitor.
Splash pages are a little like popup ads, except that they cover the entire page. The goal might not be conversion; it might just be to get the visitor to click on an ad, to make an announcement, or to let the visitor choose how they want to interact with your site.
A lead capture page can be used at any stage of the funnel, and its main characteristic is the lead capture form. Top-of-the-funnel lead capture pages ask for less information than a bottom-of-the-funnel landing page, which may ask for more details so you can get more qualified leads.
Click-through post-click landing pages are bottom-of-the-funnel landing pages that let your visitors read through your offer without being distracted by a “Buy Now” button or the equivalent. They’re ideal for products or services that require more consideration before purchase, and they usually include a free trial offer.
A sales page is a landing page that focuses on turning a visitor directly into a customer. This requires the landing page content to be even more persuasive than other types of landing pages. These pages, often include testimonials and reviews from other customers. Many also offer a special promotion or limited-time offer to entice visitors to buy the product right away.
As you look at landing page templates, be sure to choose the one that most closely matches the type of page you’re trying to create.
The call to action
Possibly the most important part of any landing page is the call to action (CTA). The CTA is a very clear instruction to your visitor: Buy this now, download this e-book, sign up for our newsletter, etc. You need to give visitors a reason to take that action, so start with a strong command and use words that will inspire emotion or enthusiasm.
One useful tactic is to instill a little fear of missing out, such as a call to action that says, “Buy this today! Sale ends Tuesday!” By evoking enthusiasm or emotion, this tactic gives your visitors a reason to take action now, instead of leaving your landing page and then forgetting about the offer.
Now that you know where to start with your landing page, the next step is to learn how different industries use landing pages and what some of the different use cases are.
Landing page uses
In the previous section, you learned about the different types of landing pages and how to start creating your own landing page strategy. We also talked about the many different ways landing pages can be used: to capture leads, sell a product, or onboard new users.
The industry you’re in can also affect the type of landing page you use, and it’s important to know what’s already working for your industry before creating your landing page.
This section will discuss ways that industries like real estate, consulting, and education can leverage landing pages, as well as how “coming soon” landing pages can help capture leads before you’ve officially launched a new business.
Landing on your next home
Real estate landing pages, like other landing pages, are highly targeted and focus much of their content on highlighting specific property listings.
Most real estate landing pages feature short, direct copy, along with images or videos of a specific property. There are three standard types of real estate landing pages that Realtors and brokers frequently use:
A home search landing page
A home value landing page
A free content landing page
The home search landing page is probably the simplest of the three because it gives the visitor a place to start searching for real estate listings. As the visitor browses listings, they’re encouraged to save favorites and leave their contact information so they can come back and look at the listings later.
The home value landing page offers a tool, such as a home valuation calculator. The visitor inputs their address and has to enter their contact information before getting their home valuation. These can either be instant home values, where the visitor immediately receives an estimated value for their home, or a comparative market analysis (CMA) value, where the visitor leaves contact information in exchange for a more accurate, professional home valuation.
Real estate agents also offer free content, like guides for buying or selling homes, in exchange for contact information. These landing pages give potential leads valuable content and let the real estate agent know what they’re interested in.
Capturing consulting leads
Business consulting firms can also leverage landing pages to capture leads. To do this, they provide a download, like an e-book or a checklist, in exchange for contact information.
Best practices for consultant landing pages include keeping the copy short and using a bold headline with a question that taps into a common industry pain point, like “Are you as efficient as you could be?” Follow this with a few sentences explaining the benefits of the consulting firm and bullet points outlining what visitors can expect after they download the gated content (usually an e-book or whitepaper).
Traveling to higher revenues
Travel industry landing pages can also be great for lead capture. These pages tend to have a lot of stunning imagery of the location, along with simple, persuasive language. Often, the travel landing page is designed to get the visitor to book a vacation now, so it has to have compelling visuals and copy to get them to hand over their hard-earned money.
Alternatively, travel landing pages can also offer a downloadable guide, like “The 10 Things You Need to See in Italy.” Not only does this provide the visitor with interesting and useful information, but it also lets the travel company know what they’re interested in — in this case, a trip to Italy.
Educating potential customers
Even higher education can benefit from landing pages. Education landing pages typically have the contact information form at the top, with a call to action to apply to the institution. Below that, they often highlight the benefits of attending the school and testimonials from successful alumni.
Educational institutions also use landing pages to encourage the visitor to request more information. In exchange for their contact information, visitors get a downloadable brochure or other piece of content regarding a major they’re interested in.
This is the natural evolution of the way people used to request information about schools — by sending a letter asking for a print brochure — and it helps the institution follow up with the visitor by offering more details about the specific program they’re interested in.
Coming soon to an inbox near you
For companies that haven’t yet launched, a “coming soon” landing page can help build buzz. These are fairly simple pages that lay out the benefits of the business and ask for the visitor’s email address. Often, they include a countdown to launch and encourage visitors to sign up for early access to the service or for a newsletter where early subscribers can get perks.
These types of landing pages focus on providing visitors with information about what to expect once a service or product launches. For example, they can include a demo video or screenshots of a product in development to help visitors decide whether they want to be notified when the launch happens.
There are a lot of uses for landing pages in a variety of industries; these are just a few. In the next section, you’ll learn about optimizing and tracking your landing pages so you can get the most out of them.
Landing page optimization and tracking
Choosing a landing page builder and template, deciding what you’ll offer in exchange for valuable contact information, and populating the landing page with content takes a lot of time.
Naturally, you’ll want to make sure your landing page performs at its absolute best. That’s where landing page optimization and tracking come in.
Landing page optimization
Landing page optimization is the process of testing different elements of your landing page to see what gets visitors to take action. You may find that using certain words or images works better when it comes to getting visitors to provide their contact information or make a purchase.
When you optimize your landing page, you use methods like A/B testing to see how well different elements work. With A/B testing, you change one element of your landing page and serve both versions (Version A and Version B) to a set of visitors to see how the change affects the conversion rate.
For example, you might use a red signup button on one version of your page and a blue one on the other. The only thing you change is the color of the button. The goal is to see which small changes produce an increase in conversions.
Optimizing your landing pages begins with understanding where your traffic comes from. Visitors may be coming from social media, ads, or email campaigns.
If you’re running a Google AdWords campaign and bidding on a particular keyword, like “Omaha real estate,” you’ll want to make sure that your landing page for that campaign is geared toward people who are looking to buy real estate in Omaha.
Conversely, if someone is coming through a social media link looking for information on selling their home, make sure the landing page they go to is geared toward how to do this.
From there, you can try different tactics to optimize your landing page:
Limit how much a visitor can do on the landing page. Test out how the conversion rate changes when you remove elements from your landing page, like extra form fields or website navigation. More white space may mean more conversions.
Try different variations of your headline and call to action that match what visitors are searching for. For example, if you get a lot of traffic for the search “how to stage my home for sale,” you could change the call to action for that landing page to “Learn how to stage my home” to see if it boosts conversions.
Establish credibility by adding customer logos, quotes, or case studies. Sometimes, just adding social proof like a Realtor® logo (if you’re a licensed Realtor) can get visitors to trust you and share their contact information.
Test different offers for your landing page. Think about the types of offers that will be compelling to your target audience and will drive conversions.
Do search engine optimization. Your landing pages don’t exist in a vacuum. Search engines can index them — if they are valuable. You can link to your landing pages from a blog page or a resource section to help get them indexed.
Landing page tracking
To help with landing page optimization, you should track certain metrics. These will help you evaluate the success of your landing page.
Views. You need to know how many people are viewing your landing page as a baseline. Check to see when people are visiting your landing page, e.g., during the week or on weekends. Look for patterns that show if there’s a particular day or time when traffic spikes.
Where visitors come from. To gauge how effective a certain campaign is, it helps to know where your traffic is coming from. You may be getting a lot of traffic from an email campaign but none from social media. This information can help you decide whether to double down on the channels that are working or try to improve the ones that aren’t getting much traction.
How many visitors are converting. You can track this metric through Google Analytics if you set up goals. By doing this, you can see how many people are completing a goal, whether it’s completing a form or downloading an e-book.
What your visitor-to-contact ratio is. This metric helps you reverse-engineer your campaign goals. Before you launch a campaign, you can set a goal for how many leads you want a campaign to receive. If you have an estimate of what your conversion rate should be, you can figure out how much traffic you’ll need to reach your goal.
How long your visitors spend on your landing page. If you have a longer educational landing page, you’ll want to make sure your visitors are giving themselves enough time to read it. If you notice a low average time on page, that may indicate you need to shorten the content or make it more digestible.
What the bounce rate is. If a lot of visitors leave your site after seeing only your landing page, and not taking action, this may mean that your offer isn’t clear or your campaign promotion is misleading.
Tracking these metrics can help you figure out if you need to further optimize your landing pages. But there’s another factor you’ll need to consider: mobile devices. In the next section, you’ll learn the difference between a landing page for a desktop computer and a mobile device, and how to optimize for both.
How to create mobile landing pages
When you create landing pages, don’t forget about mobile. Most organic search traffic in the U.S. originates from mobile phones, meaning that a lot of people use their smartphones to browse the internet. A mobile landing page can help you convert those visitors into customers.
But a mobile landing page is different than a desktop landing page. Whereas a desktop landing page is designed for visitors with more time to spend on your site and gives you more screen real estate to use, a mobile landing page is supposed to get visitors to convert quickly on a small screen. Mobile landing pages need to be built so that visitors can find what they need quickly and complete the suggested action without endlessly scrolling.
The small screen size of mobile devices probably poses the biggest problem for mobile landing pages. When visitors scroll, the call to action button might not be visible on the section of the page they’re reading. Some mobile device users may also have data limitations. For companies that have very visual products, this makes it harder to translate their full desktop landing page to a mobile page.
You must create a separate mobile landing page. Responsive design isn’t enough; all the elements on a responsive page are designed for a desktop, and mobile users search and browse sites differently than desktop users. Mobile landing pages also need shorter copy: bullet points, short sentences, and paragraphs. Don’t pack the page with images and videos; that takes up valuable screen real estate and can eat into a visitor’s data plan.
Also consider how scrolling affects your mobile landing page. You can create a shorter landing page with a “click to scroll” option that lets users go to a longer, scrolling page. On a longer page, use a sticky header or footer with your call to action. This will help users find what they’re looking for quickly and complete the action you want them to take.
Click-to-call landing pages
Sometimes you won’t be able to fit key information on your mobile landing page, like inventory, business hours, and pricing. A click-to-call landing page makes it easy for visitors to contact you to get this information. If your business offers complex products or services, a click-to-call landing page may be the best option for a mobile landing page since it gets right to the point.
Unlike a desktop landing page, where the visitor’s call to action is to fill out a form, the click-to-call landing page features a large button that will launch directly into a phone call. This makes use of both the browser and the mobile phone’s dialing capabilities, whether it’s through the phone or a service like Skype. Visitors don’t have to go to your main website to search for the information they need; they can just click on a button and get a representative on the phone to answer their questions.
Naturally, you should optimize this type of mobile landing page to encourage visitors to call you. First, make sure that the code for dialing is embedded in the page. Your landing page template should be able to handle this. Next, make sure your call to action is clear: Ask the visitor to call for more information.
A simple click-to-call landing page usually focuses on one specific product. A good example is a mobile landing page for an automobile. These types of landing pages are typically designed with one goal in mind: to get the visitor to schedule a test drive at their local dealership.
A mobile landing page for an auto dealership would include elements like a short, direct headline, a photo of the vehicle, and likely some pricing information for that model. A large “Call for Details” button will encourage the visitor to call the dealership to find out when they can schedule a test drive, what it costs for the model with a sunroof, or how many of the vehicles the dealer has in stock.
App download landing pages
If you’re an app developer, it makes sense for you to have a mobile landing page so that visitors can download your app. A mobile app landing page is the starting point for your user’s journey with your product. In Chapter 2, you learned that landing pages are effective ways of onboarding new customers; this is also the case with a mobile app landing page.
The landing page for your mobile app should clearly explain what problem your app solves. This is likely the first time your visitor has come into contact with you, and the content on your mobile app landing page needs to be compelling enough to capture their attention. A simple way to do this is by describing your app’s features and benefits in short, snappy bullet points, along with the app’s value proposition.
Another effective tactic is to provide social proof, like a testimonial, and a visual that can be easily viewed on a mobile device. Testimonials show your visitors that your app is trustworthy and really does solve problems, and a strong visual gives visitors an idea of what to expect once they launch the app on their mobile device.
But remember, that call to action button is key. Make it as easy as possible for users to see it, click on it, and go the appropriate app store for the download. Now that you know some best practices for creating landing pages, including mobile landing pages, you’ll want to know what to avoid. The next section discusses the worst practices for landing pages and how to avoid them.
The 7 deadly sins of landing pages
You’ve learned about landing page strategy and different uses for landing pages, and by now, you should have a good idea of how you’re going to structure your landing page. However, there’s plenty you shouldn’t do when creating a landing page.
Your visitors should know exactly what to do when they’re on your landing page: Provide their information, whether it’s to get a free trial or downloadable resource; click a button to call you; or download an app. Your landing page should be enticing enough to get them to convert.
If you’re making the following mistakes, you’re missing the point of a landing page.
Your landing page redirects visitors to another page
When a visitor attempts to go to your landing page, they’re redirected but to a slightly different page. Redirects can be useful for regular websites if the original site moves or you want to track what’s referring visitors to your site. But for landing pages, it’s not necessary. It slows down your site load time.
To avoid landing page redirects, make sure you send visitors to a URL that doesn’t take them somewhere else. Also, make sure that resources like images are being called directly so that there aren’t any redirects to load these files.
Your offer or call to action isn’t clear
Most people want to find easily readable, digestible, and valuable information when they’re online. Your visitors are no exception. But if they get to your landing page and can’t figure out quickly why the page even exists, they’ll go elsewhere. Your landing page needs to lay out the offer, whether it’s a free download or an app, and make the benefits clear.
In addition, your visitors can’t take action if they don’t know what to do. When you create your landing page, highlight the important parts of your product or service, the parts that are the most relevant to your ideal visitor.
The call to action should be positioned so your visitors will immediately see it. Use a color that contrasts with the background of the page. Make sure the button provides a clear direction, e.g., “Start my free trial.” The center of the page is a good place for the CTA.
The landing page loads slowly
This guide mentioned the importance of page load speed, but it can’t be stressed enough: If your landing page takes too long to load, you can lose your visitors’ attention, and they’ll leave your site.
To make sure your page is loading quickly, use tools like Google’s PageSpeed Insights to help you identify the causes of any bottlenecks. You might need to compress your image size or store static content on a cloud storage service so that your server doesn’t get bogged down with traffic requests.
There aren’t any visuals on your landing page
While too many visuals or visuals with too-large file sizes can slow down your landing page, you still need to use visuals to entice your visitors, especially if you sell a highly visual product.
Screenshots, product images, short videos, or a simple illustration of the resource you offer can all help convert visitors. Visuals can also help point your visitors to the call to action on your page. For example, a photo of a person looking in a certain direction — which just happens to be where your call to action is — can help draw your visitor’s eye to that spot.
Your landing page is cluttered
Your visitors should understand the benefits of taking advantage of your offer. But if you have too much on your landing page, including multiple offers, they’ll get overwhelmed and confused. Keep your landing pages simple and clean, with a single offer and just enough visual elements to assist with the conversion.
You don’t test your landing pages
What works well for a competitor may not work at all on your landing page, which is why A/B testing is so important. It will help you identify the elements that work for you and the ones that drive visitors away.
Create different variations of your landing page, changing just one element: the background color, page headline, type of offer, or call to action text, for example. Use one landing page with a video and another with a static image to see which one gets more people to convert.
Your landing page doesn’t match your ad
How many times have you clicked on an ad, only to be taken to a landing page that has nothing to do with the ad? When this happens to your visitors, they feel a little betrayed, like you’ve pulled a bait-and-switch on them, and they won’t be inclined to convert.
In some cases, this will leave them with such a bad taste in their mouths that they won’t trust you — for example, if you promise them a free trial but then ask them to provide their credit card information. Make sure your landing page imagery and content is consistent with your ad imagery and content.
These tips should help you avoid creating landing pages that don’t get the results you want. In the next section, you’ll learn about how JotForm can help you make the most of your landing pages.
How JotForm can enhance landing pages
As we’ve discussed, two of the main purposes of landing pages are onboarding new users and collecting contact information in exchange for a freebie. Both require a form that can integrate with your landing pages, reliably collect information, and deliver it to your backend system.
JotForm makes this process easy. You can create forms using JotForm’s drag-and-drop form builder, adding the fields you need visitors to fill out. You can also place a button on your landing page to direct visitors to the form.
JotForm allows you to style your form so it will match the look and feel of your landing page and your overall branding. With over 10,000 templates to choose from, it’s quick and easy to design and implement a contact form for your landing page.
The forms come already optimized for mobile devices, so you can embed one directly into the landing page, or you can send visitors to a JotForm mobile form to collect their information.
JotForm integrates on the backend with most CRM systems and databases, storing the data where you want it while your user continues on their journey.
JotForm ensures the data your visitors submit is safe. A 256-bit SSL connection with a SHA-256 certificate, the same level of protection used by online banking providers, keeps all of your lead and customer data safe. You can also encrypt your forms to make sure that submission data is transferred and stored securely. JotForm uses high-grade RSA-2048 on the user’s computer. If you collect payment data, JotForm is fully PCI DSS compliant.
In addition, if any of your users are in the European Union, you need to comply with the EU’s General Data Protection Regulation (GDPR), which applies to any business that collects information from customers in the EU. JotForm is GDPR compliant, which makes it easier for you to expand your global reach.
JotForm helps ensure you collect useful data from visitors. While you’ll get a lot of valuable leads or new users if you’ve followed the advice in this guide, you’re also likely to get your fair share of spam bots filling out your lead capture forms. JotForm lets you use Captchas in your forms and provides options to protect yourself from spammers. For example, you can restrict submissions to just one per IP address, or you can disable your form after a certain number of submissions.
Finally, JotForm lets you run A/B tests on your forms so you can see if eliminating a form field or changing the color of the submit button leads to more conversions.
Examples of JotForm in landing pages
There are a lot of ways that JotForm can enhance your landing pages, no matter the sector. One example is summer camp registration. Your landing page can direct prospective campers to a registration form. By integrating JotForm, you can register campers, accept payments, and populate your system with the relevant information on your campers automatically. You can even build a form for other purposes: collecting medical information, accepting a payment, arranging for arrivals, or getting feedback.
You can also use JotForm to create a PayPal form. A PayPal form lets you collect payments directly from your landing page, as opposed to collecting information to make a sale later on. JotForm has several PayPal payment tools available, including support for both PayPal Pro and PayPal Checkout.
You can create HIPAA-compliant forms with JotForm. Access to HIPAA compliance features requires a Silver plan. If your visitors need to submit medical information, you can rest assured that you’re following HIPAA regulations. Users can also upload images or electronically sign documents. With HIPAA compliance, you can integrate with other HIPAA-compliant software, such as Google Sheets. JotForm even has HIPAA-compliant templates you can use so you don’t have to start from scratch.
With JotForm, you don’t have to reinvent the wheel when it comes to the forms you use to collect visitor data. Whether you embed the form into your landing page or direct visitors to a separate form via a button, JotForm lets you focus on building a stunning landing page that inspires visitors to complete the call to action. It’s one less thing you have to worry about, and it makes the conversion process that much easier.
Conclusion
Landing pages are effective ways of generating leads, onboarding new users, and collecting visitor information so that you can move them further along the sales cycle. In this guide, you learned about the importance of building a landing page that’s separate from your homepage or product page so that your visitors know exactly what you want them to do.
Getting started with landing pages can seem daunting, but once you identify your target audience, find the right landing page builder or template, and craft a call to action that will resonate with visitors, you have a better chance of getting them to convert.
You also learned about the seven deadly sins of landing pages, like landing page redirects and unclear calls to action. Using best practices will help increase conversions because your landing page will display quickly, provide visitors with the information they need, and make it clear what you expect them to do.
Finally, this guide also covered how you can use JotForm to enhance your landing pages. The primary goal of many landing pages is to collect information, and JotForm gives you an easy way to capture visitor data and store it securely.
The tips in this guide will help you build landing pages that convert website visitors into paying customers. Follow our tips and best practices, and keep testing different elements on your pages to make improvements over time, and you’ll see the results start to roll in.