Skip to main content

Email personalization gone wrong (and how to fix it)

Have you ever accidentally called someone by the wrong name? It’s embarrassing, right? When it comes to your marketing messages, the stakes are even higher: personalization gone wrong can quickly sour customer relationships. That’s why it’s crucial to follow best practices for email personalization as you build your campaigns. 

Creating a personal experience is a powerful pathway to customer engagement. Let’s dive into the why and how of personalization gone wrong—and practical steps you can take to ensure you get it right.  

Here’s what we’ll cover:

What personalization gone wrong looks like

Ever seen an email that starts like this:

First name personalization fail

Or how about this:

Email name personalization fail

Imagine this scenario in person, face-to-face with an acquaintance: “Hello, first name, great to see you!” or “Hi [awkward pause]” like you forgot their name entirely. You can apologize and recover with a friend, but customers might not be as forgiving. 

When you use email personalization, you’re trying to build rapport with the recipient. When you get the customer name wrong, it has the opposite effect. And it’s not just about names: you can personalize emails with dynamic content, but you need to get every element right.

Bottom line: bad personalization = a bad impression that can quickly undermine engagement. 

Why email personalization matters

Email personalization uses data to tailor messages to each individual. It’s not just an effective way to connect with your audience. Customers demand it increasingly: 76% of people expect personalized attention from brands’ marketing (source). Smart brands are stepping up to the challenge: 81% see personalization as an important part of their messaging strategies, and 73% plan to increase personalization efforts in the coming year (source). 

Luckily, you already have what you need to deliver the customized experiences customers are asking for: data. You know a lot about your customers, who they are, what they like, how they behave. Every data point can be used for message personalization with dynamic content, making each email feel timely, relevant, and tailor-made for every individual.  

How dynamic content works to personalize emails

While you can get quite sophisticated with dynamic content, the core principle is straightforward: you code your email to pull info from your database and display customized content relevant to the individual. 

Name personalization is a great way to explore how to personalize emails using dynamic content. It’s a data point you’ll have on every contact (hopefully!), and typically, all you need to activate it is a first name code. 

To personalize your email with a first name, you’ll want to use a templating language. The language will vary depending on your email tool. For this example, we used Liquid to create the first name code: 

Hello, {{customer.first_name}}! Thanks for subscribing to the Burgerific newsletter!

When your customer receives the email, their first name from your database will replace the first name code.

Hello, Teddy! Thanks for subscribing to the Burgerific newsletter!

Personalizing the first name or last name in an email is the tip of the iceberg. You can tailor both copy and images based on your customer data—where they live, their purchase history, their stated interests, interactions they’ve had with your brand, and more. 

How you end up with personalization gone wrong

The principles behind dynamic content may be simple, but there are plenty of pitfalls in practice. When customer data flows in from different sources—like website signups, lead generation forms, and event registrations—messaging tools collect a grab bag of data. And humans are notoriously inconsistent and guilty of irregular capitalization, errant spacing, typos, and other mistakes. 

This inconsistency can make message personalization challenging. It’s how you end up with a database of recipients that looks something like this:

Email, first, and last name attributes in Customer.io

In this example, we have a list of customers who signed up for the Burgerific newsletter. You can see several potential problems for even something simple like including the customer’s first name or last name in emails:

  • Not every name is capitalized
  • There are some empty data fields
  • Bob entered a first and last name together in the same field
  • Felix has an email but no name data (this is bound to happen when using registration forms with just an email address field)

Name personalization is an essential element of messaging—many marketers drop in a first name email code as a matter of course. But woe to those who have data issues in their system! This is an extremely common problem, but luckily, there’s a simple solution.

How to prevent email personalization mistakes

The simple fix to avoid embarrassing personalization errors is to have a backup plan! When it comes to email personalization, that backup plan is fallback text.

A fallback is a word or phrase that will be substituted if you’re missing the required data. This is a powerful way to protect your message personalization from breaking. For example, here’s how fallback text could save the day when there’s no data for the first name code:

First and last name attributes in Customer.io

In the case of Felix, we’re missing both first and last name information. So in addition to Hello, {{customer.first_name}}! we’ll code the email to use “burger-lover” as fallback text. When there’s no data in Felix’s profile for the first name code, it will send this fallback email:

Hello, burger-lover! Thanks for subscribing to the Burgerific newsletter!

Awkwardness avoided! So how exactly does the magic happen? It’s thanks to a little thing called Liquid. 

Preventing personalization gone wrong with Liquid  

Liquid is a powerful templating language that makes it easy to personalize content with customer data. To solve the “Hello [firstname]” issue above, you create a fallback in Liquid that checks to see if the name data exists and replaces the recipient’s first name with alternate text when it’s missing.

Here’s how to use Liquid in Customer.io Journeys to save yourself from bad personalization blunders. 

Step 1: Understand data types and Liquid variables

There are two types of data in Journeys: customers and events. Both can have attributes. Customer attributes—like name, location, subscription plan, or email address—describe a person or their current state. Event attributes describe details about a specific event. For example, a purchase event might have attributes like plan type, invoice date, overage amounts, etc.

When you want to include an attribute to personalize your message, you’ll use a Liquid variable, wrapping the attribute name in double curly brackets like this: {{data_type.attribute_name}}. 

For example:

  • Names are customer attributes; a first name email code would look like this: {{customer.first_name}}
  •  Transactions are events; code for inserting the date of a transaction might look like this: {{event.purchase_date}}

💡 Customer.io pro tip

What’s unique about Journeys is that the email won’t send if a recipient is missing a specific variable. You avoid “Hello [first name]” situations and similar mistakes. However, you’d still want to use fallback text so you don’t have to spend time troubleshooting and fixing failed sends!

Step 2: Write your rule in plain language

The easiest way to start understanding how to use Liquid fallback text is to write out what you want to happen in plain language. It may seem silly, but it’s a great habit that will be especially helpful as you uncover and prepare for more complex cases.

For creating a name personalization fallback, your rule may look a little something like this: 

Insert the recipient’s first name. But if you don’t have the recipient’s first name in your database, replace the first name with “burger-lover”.

Step 3: Build your Liquid one step at a time

The best way to translate this statement into Liquid is to start by imagining the database is perfect. In that case, your message starts like this:

Hi {{customer.first_name}}!

Of course, no database is perfect, so we’ll create a fallback using an “if/else” rule. We’ll start by placing the “if” conditions (in single curly brackets) around the first name email code:

Hi {% if customer.first_name %}{{ customer.first_name }}{% endif %}!

Now, let’s add the fallback text. An “else” statement will determine what to output if there’s a blank or missing first name. We’ll add it after the “if” conditions:

Hi {% if customer.first_name %}{{ customer.first_name }}

{% else %}burger-lover{% endif %}!

In plain English, this means that if there’s no first name value, replace the name with the word “burger-lover.” The email won’t fail, and recipients with missing data will see “Hi burger-lover!”.

Step 4: Refine your rules further

Remember the capitalization inconsistencies in the Burgerific customer data? One simple way to improve your email personalization is to fix those details using Liquid instead of dealing with them in your database. To do so, add a capitalization filter:

Hi {% if customer.first_name %}{{ customer.first_name | capitalize }}

{% else %}burger-lover{% endif %}!

Or, if you suspect that some people have their first and last names in the first_name field, you can split the two words so that your first name code pulls out the actual first name. In the code below, the split filter looks for a blank space in the field. When it finds one, it will only include the first word.

Hi {% if customer.first_name %}{{customer.first_name | capitalize | split: ” ” | first}}

{% else %}burger-lover{% endif %}!

Step 5: Preview!

Conducting a quality assurance review before sending a message or setting a campaign live is always recommended—and it’s crucial to avoid personalization gone wrong.

Let’s look at Felix’s case again. Remember, we have his email address in the system, but no first or last name exists. In Journeys, you can check the preview to see how the email will render for Felix.

Here’s what you see in the preview when you’ve inserted the first name Liquid variable with no fallback text:

Email preview in Customer.io

You can see the problem right away. Plus, Journeys will notify you when there’s an issue. Just click the “Review Error” button to see what data you’re missing for this person. 

Review errors screen in Customer.io

You know what to do: use Liquid to add fallback text, like we did in step 3 above. Here’s what that looks like in the composer preview:

Burgerific email example in Customer.io

Now, you can rest assured that your message personalization won’t break if data is missing. Each email will open with individualized name personalization or fallback text instead of a face-palm—hooray! 

💡 Customer.io pro tip

Journeys simplifies error-free name personalization with one-click fallback insertion in the drag-and-drop email editor. You just select the attribute for which you need fallback text, and Journeys pops it into your email! See it in action in this video.

From personalization gone wrong to engagement done right

Bad personalization decreases engagement. But with strategic use of dynamic content and the power of Liquid for fallback emails, you can deliver the kind of experiences that deepen customer relationships and increase retention. 

As you experiment with Liquid email personalization in your campaigns, keep these tips in mind:

  • Test your emails: Double-check details in your Liquid code, like where you’ve put spaces and punctuation. If you see funky stuff like “Hi Linda,,” or “Hello ,” in the preview, take a close look at your code to fix it.
  • Look for more personalization opportunities: Once you graduate from basic name personalization, start exploring the endless ways you can use dynamic content to make your personalization awesome. A good next step: dynamic date formatting with Liquid to celebrate customer birthdays, anniversaries, and milestones. 
  • Get comfortable: Don’t be afraid of the Liquid templating language! It may seem intimidating, especially if you’ve never coded. But you can experiment with confidence with safeguards like error detection and preview capability in Journeys.  

Finally, remember that true email personalization is more than inserting “Dear first name” at the top of every message. The name trick can help some, and slip-ups with data and dynamic content can hurt a bit—but at the end of the day, personalization must be meaningful to work, depending on whether your message is relevant or not. So, take your strategy up a notch by combining message personalization with triggered real-time personalization that responds in the moment when customers take certain actions or hit milestones in their journey.

Ready to go beyond “Hello {{ customer.first_name }}” for personalized emails that really resonate? Get into the nitty-gritty with our guide to intermediate and advanced Liquid!