In the times of Python and AI, automated content generation seems like something you need serious technical chops to be able to implement... but that isn't necessarily the case. This talk explains how to think about sentence structures in a way that allows you to build them in bulk using data.
2. CONTEXT
BEAUTY AFFILIATE
SITE WITH 200K+
INDEXABLE URLs
There are nearly 450k products on the site
from 1,710 brands and this is growing as more
affiliates come on board. These products
include variants such as colour and size, which
sit under the same URL, depending on the
variant type.
The main aim of the site is to allow users to find
the right product at the best price.
#WTSFest | @emlruss | Slingshot Organic
3. ABOUT THE
PROJECT
1. The primary aim of the project was to provide the
user with information about the product that
would help them make a purchase decision.
2. The secondary aim was to ensure that this
content would help the site to rank well or at
least not jeopardise rankings
#WTSFest | @emlruss | Slingshot Organic
4. Why automated
text?
The site was new with no history of
content built up over time to rely on.
Thousands of new products were added
each week.
The team was lean with no outsourcing.
We had to focus on product pages to
rank for anything at all
#WTSFest | @emlruss | Slingshot Organic
12. BELOW THE FOLD CONTENT
WAS NOT SO GOOD
#WTSFest | @emlruss | Slingshot Organic
13. SO WE DECIDED TO USE THE
DATA WE HAD TO PROVIDE
MORE VALUE TO THE USER
#WTSFest | @emlruss | Slingshot Organic
14. 1. What do we want
to create?
Text blocks based on ingredients
data that help the user to convert
and uses the main product name
only once.
Price and review data is fine but
ingredients data needed
unpacking further.
Fragrance notes were also added
at a later stage.
#WTSFest | @emlruss | Slingshot Organic
15. Because we’re making functional
statements about a product, which
don’t require complicated prose.
Multiple, fairly simple
sentence structures
Because ingredient data wasn’t just
“is vegan”, or “is cruelty-free” but
also “is dermatologically tested”.
Sentences would need to
fit together well
This would allow us to avoid multiple
very short sentences that read in a
spammy way to the user.
Sentences would need to
allow for lists
Text blocks would be fairly
short
Again, this is because the language is
functional and doesn’t require us to
wax lyrical or have a definite style.
#WTSFest | @emlruss | Slingshot Organic
16. BECAUSE THE OUTPUT
WAS SIMPLE, WE USED
A SIMPLE METHOD OF
TEXT GENERATION
#WTSFest | @emlruss | Slingshot Organic
17. CONTENT
GENERATION
PROCESS
● Affiliate feeds
● PIM/PIP bulk upload
● Manual Attribution
● Scraping
● {{product}}
● {{brand}}
● {{category}}
● {{other.Data.Stuff}}
If X = Y then action Z
DATA DATABASE RULES SOMETHING
#WTSFest | @emlruss | Slingshot Organic
18. “This Aromatics Elixir
body wash from
Clinique is vegan.”
INGREDIENT
PREFERENCES
TEXT EXAMPLE 1
#WTSFest | @emlruss | Slingshot Organic
19. “This Aromatics Elixir
body wash from
Clinique is vegan.”
INGREDIENT
PREFERENCES
TEXT EXAMPLE 1
This {{product.Name}} is {{ingredient}}.
#WTSFest | @emlruss | Slingshot Organic
21. No.
2. Do we have enough
data to create what
we want?
#WTSFest | @emlruss | Slingshot Organic
22. CONTENT
GENERATION
PROCESS
● Affiliate feeds
● PIM/PIP bulk upload
● Manual Attribution
● Scraping
● {{product}}
● {{brand}}
● {{category}}
● {{other.Data.Stuff}}
If X = Y then action Z
DATA DATABASE RULES SOMETHING
#WTSFest | @emlruss | Slingshot Organic
It’s quicker to categorise
a brand and cascade that
down than manually
attribute every product.
It’s quicker to categorise
a brand range than
manually attribute every
product.
24. This {{product.Name}} is aloe vera.
This {{product.Name}} is jojoba oil.
This {{product.Name}} is stearic acid.
This {{product.Name}} is coconut oil.
#WTSFest | @emlruss | Slingshot Organic
25. Also no.
3. Is this data
stored in a useful
way?
#WTSFest | @emlruss | Slingshot Organic
26. This {{product.Name}} is {{ingredient}}.
Unique data
“This Aromatics Elixir body wash
from Clinique is vegan.”
This product is {{ingredient}}. “This product is vegan.”
DUPLICATION WOES
This {{L3}} is {{ingredient}}. “This body wash is vegan.”
#WTSFest | @emlruss | Slingshot Organic
27. DUPLICATION WOES
This Iconic London product is
cruelty-free.
ICONIC London
Day to Slay Eyeshadow
Palette
ICONIC London
Powder Contour
Palette
ICONIC London
Luminous Powder
This Iconic London product is
cruelty-free.
This Iconic London product is
cruelty-free.
28. Chloé Absolu Eau de
Parfum
Chloé Eau de Toilette
VARIATION WOES
The Eau de Toilette from Chloe
features pink peony, rose and
cedarwood fragrance notes.
Chloé Eau de Parfum
The Absolu Eau de Parfum
from Chloe features pink
peony, rose and cedarwood
fragrance notes.
The Eau de Parfum from Chloe
features pink peony, rose and
cedarwood fragrance notes.
29. WHEN ATTRIBUTING
PRODUCTS AT A BRAND
LEVEL, ALL THOSE
PRODUCTS AUTOMATICALLY
HAVE THE SAME DATA
#WTSFest | @emlruss | Slingshot Organic
30. DUPLICATION
WOES
● Affiliate feeds
● PIM/PIP bulk upload
● Manual Attribution
● Scraping
● {{product}}
● {{brand}}
● {{category}}
● {{other.Data.Stuff}}
If X = Y then action Z
DATA DATABASE RULES SOMETHING
By choosing the right data
from the database and
creating a number of rules
that can be used and
making compound
sentences you can get far
more variation and unique
text.
#WTSFest | @emlruss | Slingshot Organic
31. Yes and yes.
4. Are we creating
duplicate content
and do we care?
#WTSFest | @emlruss | Slingshot Organic
32. The 3 In 1 Foundation from 3INA
is vegan and contains vitamin C,
which helps to protect against free
radical damage. It also contains
vitamin E.
INGREDIENT
PREFERENCES
TEXT EXAMPLE 2
#WTSFest | @emlruss | Slingshot Organic
33. {{product.Name}} from {{brand}}
is {{ing.IS}} and contains
{{ing.C}}, which helps to
{{Ing.C.Benefit}}. It also
contains {{ing.C}}.
INGREDIENT
PREFERENCES
TEXT EXAMPLE 2
#WTSFest | @emlruss | Slingshot Organic
35. Create a shared lexis everyone
understands
5. How do I present
these rules in a way
the team can
understand?
#WTSFest | @emlruss | Slingshot Organic
36. TRY TO BREAK THE SENTENCES AS MUCH AS POSSIBLE
Rule Example Output
The {{product.Name}} from
{{brand}} is {{Ing.Is}}, {{Ing.Is}}
and {{Ing.Is}}.
The Boss In Motion Eau de Toilette Spray 90ml from Hugo
Boss is vegan, halal and hypoallergenic.
The Lip Essentials Gift Set from High Definition Beauty is
vegan, halal and hypoallergenic.
The Buffet 30ml from The Ordinary is vegan, halal and
hypoallergenic.
The The Celestial Skin Liquid Lighting from Kevyn Aucoin is
vegan, halal and hypoallergenic.
#WTSFest | @emlruss | Slingshot Organic
37. BROKEN
SENTENCE WOES
● Affiliate feeds
● PIM/PIP bulk upload
● Manual Attribution
● Scraping
● {{product}}
● {{brand}}
● {{category}}
● {{other.Data.Stuff}}
If X = Y then action Z
DATA DATABASE RULES SOMETHING
If you break a sentence,
add another IF rule that
deals with the exceptions.
For example: if the product
starts with “The”, remove
the duplicated word, OR
force those products to use
a different sentence
structure.
#WTSFest | @emlruss | Slingshot Organic
38. ALWAYS REQUEST A FINAL
OUTPUT AND CHECK ON
STAGING / A LOWER
ENVIRONMENT
#WTSFest | @emlruss | Slingshot Organic
39. Yes, please.
6. Do I need help
from other people?
#WTSFest | @emlruss | Slingshot Organic
41. Let’s ask
7. What development
resource is available
and how experienced
are they?
#WTSFest | @emlruss | Slingshot Organic
42. How is this
information added
to the page? –
Injected via JS?
Code-based and in
the source?
Q1
Is this based on seeded
or continual
randomisation? Is this
text going to be the
same each time?
Q2 Q3
If the data changes
when will this be
reflected on the
page?
A FEW QUESTIONS TO ASK YOUR
DEVELOPERS
#WTSFest | @emlruss | Slingshot Organic
43. This moisturiser from Bioderma is
paraben free, hypoallergenic and
non-comedogenic and contains
citric acid, which helps to exfoliate
skin.
Bioderma Atoderm
Ultra-Nourishing Shower
Cream
Rituals The Ritual of
Ayurveda Body Mist 50ml
SOME FINAL EXAMPLES
This Rituals perfume for
women is paraben free, cruelty
free and phthalates free and
features floral and oriental
fragrance notes.
Fudge Paintbox Hair
Colourant
This hair colour from Fudge is
ammonia free and peroxide free
44. PHB Ethical Beauty Anti-aging
Eye Gel is perfect for those
looking for a product with
anti-ageing properties.
It’s also vegan, paraben free and
alcohol free, and contains vitamin
C, which helps to fight
photo-ageing. It also contains
collagen, argan oil and lavender
oil.
Clinique Anti-Blemish
Solutions Liquid Makeup
STARSKIN After Party
Coconut Bio-Cellulose
Second Skin Brightening
Face Mask
Clinique Anti-Blemish Solutions
Liquid Makeup is great for those
with normal and oily skin, looking
for medium and sheer or natural
coverage and aiming to get a
natural finish.
It’s also vegan, oil free and
dermatologically tested, and
contains salicylic acid, which
helps to prevent pimples from
forming.
PHB Ethical Beauty
Anti-aging Eye Gel
STARSKIN After Party Coconut
Bio-Cellulose Second Skin
Brightening Face Mask is perfect
for those looking for a product
with hydrating properties.
They’re also paraben free, mineral
oil free and sulphate free, and
contain vitamin C which helps to
gently brighten skin. It also
contains coconut oil.
45. Philip Kingsley
Weatherproof Hairspray
BLOOPERS
Philip Kingsley Weatherproof
Hairspray is built to target uv
protected and shiny hair.
These Philip Kingsley hair
styling products are cruelty
free and contain aloe vera,
which helps to promote
elasticity.
NYX Professional
Makeup Honey Dew Me
Up Primer
NYX Professional Makeup Honey
Dew Me Up Primer is ideal for those
with normal, mature and dry skin
who are aiming to get a dewy finish.
This face makeup from NYX
Professional Makeup is cruelty free
and contains hyaluronic acid, which
helps to keep skin moisturised. It also
contains lavender oil.
46. If you don’t have
development
resource - try AX
Semantics
1
Become the
development resource
- python
2 3
GTP3??
WAYS TO CREATE AUTOMATED
TEXT
#WTSFest | @emlruss | Slingshot Organic