18. Whatever is your setup keep an eye on the SEO
“DevMometer”
@Pechnet
Fresh start or migration to
new platform with prospect of
healthy collaboration
SEO team has no direct control on CMS
choice and product but has to pitch
changes to web/product team
Cms is already in place & there is
very little SEO team can change
19. Less friction the more your team** is full stack
@Pechnet
SEO Specialists Full Stack Devs Frontend Devs Designers Copywriters
Editors
Translators
Publishers
Analysts
**Credit for all the below actually goes to them, I simply do the talk :)
21. 3 years later on the content / SEO side of the team
@Pechnet
2 3 15 1712 3M
Custom
CMS
SEOs Content
specialists
CountriesLanguages Indexed
Pages
22. We growth at the speed at which we ship/optimise
pages
@Pechnet
3M INDEXED PAGES 🚀
23. Publishing via CMS doesn’t scale: go beyond basic SEO
checks and optimise operations!
Copywriters
Editors
Translators
Publishers
Keyword Data Unique page
@Pechnet
24. 4 categories
of features
you should
invest
engineering on
Make search engines bots happy
Accessibility
Avoid screwing up
Monitoring
Improve team processes
Publishing Ops
Build automation
Scaling
@Pechnet
27. Don't just give
developers
a list
of SEO features
Customize URLs
Meta data
Structured data
Canonicals and redirects
Indexing
Sitemaps
hreflang and geotargeting
28. Define what is must to build and what you can hack:
Our first xml sitemap after launching 1M+ URLs!
@Pechnet
Lorem 3
Put KPIs against
hacked process until
we realised we were
hitting scaling
issues and couldn’t
simply keep up.
TIme for engineers
to automate it.
Lorem 1
To save dev time we
worked harder on
building a strong
internal link structure
that bots could crawl
more efficiently.
Lorem 2
Built manually by
SEOs.
>>Dump list of URLs
from DB
>> Build static XML
sitemap
>> Upload regularly
Build itDo without Hack it
30. Define what is handled by the platform Vs what is
managed by users
@Pechnet
#1 Language/Country selector
#2 Unique page hreflang key
#3 Locale-mapping
31. Users only select language/country + unique key,
Platforms does the mapping to URL locales
@Pechnet
Language/Country selector Unique page hreflang key
Locale-mapping
32. Invest time defining ideal user roles and rights 🚧
@Pechnet
SEO
Social/PPC/Affiliate
Content Specialist
Regional Marketing
Manager
● Full admin access + API access
● Approve change from other profiles on SEO features
(indexing, canonicals, hreflang)
● Can duplicate SEO indexed pages, confined to non to
publish on folders that no index by default
● API access
● Restricted access to SEO features
● Require approval on editing/duplicating/deleting index SEO
pages if published on folders linked from main architecture
34. Why scraping a site you actually own?
@Pechnet
Everytime you press update on any page
changes get stored in your database. You
don’t need to crawl your site to find out!
35. Connect your data
@Pechnet
Connect your database to an easy to use BI server, such as Metabase,
Looker or similar.
Metabase is the easy, open source
way for everyone in your company to
ask questions and learn from data.
37. Process with external monitoring
Introduce
error
Crawl site Compile
report
Identify owner &
request fix
Publish fix
Process built into platform
Introduce
error
Instant
notification
Publish fix
@Pechnet
40. Plain content search capability
@Pechnet
We can now search ing content of each page directly into Looker
Example: We want to identify all blog articles that contain links to
sources that require regular updates.
41. Rendered content search capability
@Pechnet
We want to limit our team
scraping the site during their
day to day operations and
give them access to fast
insights.
Example: Find all comparison
tables where we have issues
with markdown that prevent
us from capturing feature
snippets.
42. #1 Locate the issue
@Pechnet
1. Replicate the issue
2. Inspect element
47. Fine tune backend to achieve seamless workflow
@Pechnet
Easy access to brief &
draft from writers
Automatically track
keywords via API
48. The Average Handling time (AHT) is normalizing. In average it takes around 15-18 days for each of the
production stages. Overall it takes us 2 - 3 months to publish an article from the moment the brief for
it is created.
Measure time to publish KPIs to evaluate process
efficiency and value of adding features
Publishing
Analyst
54. Learn how to use APIs
@Pechnet
Understand how your CMS works:
database, data format and structure
Example: our CMS is running on a
PostgreSQL database and each page is
stored in a JSON format.
Examples for other CMS:
https://developer.wordpress.org/rest-api/
55. Why would we do it? (Use cases)
@Pechnet
Creating and updating landing pages manually takes time and is
prone to errors.
Create 1000s of scalable landing
pages from scratch
Update out-of-date content, or fix
broken links in scale
Delete obsolete pages Clone existing pages at scale
57. Use case: Wrong canonical and optimise meta
elements
@Pechnet
Example:
We wanted to update values for meta titles on 200+ landing pages.
At the same time, some of the pages had incorrect value for
rel=canonical
58. #1: We have prepared our list of changes
@Pechnet
Prepare your changes in a simple csv - we also included a
path name for an extra check to make sure we have the
correct page ID
59. #2: We wrote a simple script in python
@Pechnet
We wrote a simple python script to
download a JSON response for
relevant page ID, make required
changes and then send the
updated JSON back to the API.
60. #3: Test locally & execute in production 🚀
@Pechnet
After first testing the changes in a local environment, we were ready to
run the script in production:
$ pipenv run python find-replace-request.py csv-filename public
200+ pages optimised!
62. Use case: create 1000 new landing pages
@Pechnet
Imagine you want to create 1000 new templated landing pages - for
example to sell different types of ice cream, in multiple languages.
Each page should contain information about different aspects of ice
cream:
- Its flavour
- Price
- And list of allergens
63. #1: Create a template
@Pechnet
In JSON format, create template matching the API schema
and map templated fields to variables.
64. #2: We have prepared our list of variables
@Pechnet
Prepare the values for templated fields in a csv like this one:
65. #3: We wrote a simple script in python
@Pechnet
We wrote two simple python scripts:
1. To generate JSON files based on variable values and template
2. To send JSON files as a POST request to our API
66. #4: Test locally & execute in production 🚀
@Pechnet
$ pipenv run python api-request.py csv-filename public
After first testing the changes in a local environment, we were ready to
run the script in production:
1000+ new pages launched!
67. We used to hack our Database 🙈, with API it’s safer
and way more efficient
@Pechnet
1000+
new
pages
DONE!
Step 1: We plugged our CMS to Metabase Step 2: Understand template in JSON
Step 3: Edit template, concatenate JSON Step 4: Inject data in in PosgreSQL
☢
68. Exceptionally powerful when combined with widgets
that leverage internal/product data
Frontend Widgets
Price Comparison
Service
Data
Collection
Service
Landing pages
@Pechnet
71. 🚨 Warnings 🚨: what we didn’t know 3 years ago
@Pechnet
Must do:
Escape technical dependencies from other teams, takes time but it’s worth
Don’t limit to just sending a SEO recommendation without knowing how
people will implement it in your organisation
Treat users of the platform as your customers and spend time working out
how they use it, put KPIs against usage
What could have been faster or gone better:
Don’t let your ability to develop the platform limit your growth
Don’t build features until you future proof them, iterating it’s ok but
shutting down stuff isn’t.
72. @Pechnet
Start with an empowered autonomous full-stack SE0 team…
1. Constantly redefine what SEO features are
handled by platform vs users
3. Invest in features to improve publishing
operations
2. Build monitoring into your platform
4. Leverage APIs to scale
73. @Pechnet
Link to slides >>
wi.se/seo-friendly-cms
Money without borders >>
wi.se/borderless
Join us >>
wi.se/seo-jobs
Thank you