Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Developing a SEO friendly CMS from the ground up - Digital Elite Day 19

My talk at Digital Elite Day 2019

Developing a SEO friendly CMS from the ground up - Digital Elite Day 19

  1. 1. DEVELOPING A SEO FRIENDLY CMS FROM THE GROUND UP Fabrizio Ballarini
  2. 2. @Pechnet Link to slides wi.se/seo-friendly-cms
  3. 3. WHAT IF I TOLD YOU IT DEPENDS
  4. 4. What makes the best performing website? @Pechnet
  5. 5. How important is the CMS to control your site performance? @Pechnet
  6. 6. What is the average depth of understanding of CMSs among SEO professionals? @Pechnet
  7. 7. The less control the highest chance to underperform vs plans! @Pechnet
  8. 8. The choice is wide, not entirely SEOs fault @Pechnet
  9. 9. Yet we have preferences @Pechnet
  10. 10. We are asked to contribute to technical decisions @Pechnet
  11. 11. Debug what is broken @Pechnet
  12. 12. Produce guidelines and documentation, define processes @Pechnet
  13. 13. Choosing is not simple as some choices don’t have immediate impact on SEO @Pechnet
  14. 14. Every situation is different and you can’t simply follow what’s recommended @Pechnet
  15. 15. Your problems are unique to your business, so are your processes @Pechnet Our landing page creation flow
  16. 16. We decided to build our own: Meet Lienzo @Pechnet
  17. 17. 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
  18. 18. 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 :)
  19. 19. Simple basic growth levers @Pechnet CTR Conversion Rate Unique Pages Search volume Customers
  20. 20. 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
  21. 21. We growth at the speed at which we ship/optimise pages @Pechnet 3M INDEXED PAGES 🚀
  22. 22. Publishing via CMS doesn’t scale: go beyond basic SEO checks and optimise operations! Copywriters Editors Translators Publishers Keyword Data Unique page @Pechnet
  23. 23. 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
  24. 24. Accessibility
  25. 25. Development roadmap
  26. 26. Don't just give developers a list of SEO features Customize URLs Meta data Structured data Canonicals and redirects Indexing Sitemaps hreflang and geotargeting
  27. 27. 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
  28. 28. Human vs Platform
  29. 29. 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
  30. 30. Users only select language/country + unique key, Platforms does the mapping to URL locales @Pechnet Language/Country selector Unique page hreflang key Locale-mapping
  31. 31. 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
  32. 32. Monitoring
  33. 33. 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!
  34. 34. 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.
  35. 35. “Ranking Perpetrators” get instant notifications @Pechnet
  36. 36. 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
  37. 37. Publishing Ops
  38. 38. Faster operations
  39. 39. 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.
  40. 40. 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.
  41. 41. #1 Locate the issue @Pechnet 1. Replicate the issue 2. Inspect element
  42. 42. #2 Edit as HTML @Pechnet
  43. 43. #3 Select the HTML rendered representation of the table header @Pechnet
  44. 44. #4 Filter in Looker ⚡ @Pechnet 1. Manipulate copied element to fit Looker avance match rules 2. Apply filter and identify pages affected in seconds
  45. 45. Better sync with SEO operations
  46. 46. Fine tune backend to achieve seamless workflow @Pechnet Easy access to brief & draft from writers Automatically track keywords via API
  47. 47. 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
  48. 48. Faster validation
  49. 49. https://developers.google.com/analytics/solutions/experim ents-client-side User friendly built in split testing 🚧 @Pechnet Create pages in the way you are used to do it regularly, nothing different. A page for the control group: https://transferwise.com/page-a A page for the test group: https://transferwise.com/page-b Add experiment key & launch test!
  50. 50. Scaling
  51. 51. Leverage APIs
  52. 52. Know your CMS, your content & structure data @Pechnet
  53. 53. 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/
  54. 54. 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
  55. 55. Optimisation
  56. 56. 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
  57. 57. #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
  58. 58. #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.
  59. 59. #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!
  60. 60. Scaling launches and MVPs
  61. 61. 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
  62. 62. #1: Create a template @Pechnet In JSON format, create template matching the API schema and map templated fields to variables.
  63. 63. #2: We have prepared our list of variables @Pechnet Prepare the values for templated fields in a csv like this one:
  64. 64. #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
  65. 65. #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!
  66. 66. 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 ☢
  67. 67. Exceptionally powerful when combined with widgets that leverage internal/product data Frontend Widgets Price Comparison Service Data Collection Service Landing pages @Pechnet
  68. 68. 🤖 APIs beat Humans 🤖 @Pechnet 👨‍🔬👩‍🔬
  69. 69. What did we learn so far
  70. 70. 🚨 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.
  71. 71. @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
  72. 72. @Pechnet Link to slides >> wi.se/seo-friendly-cms Money without borders >> wi.se/borderless Join us >> wi.se/seo-jobs Thank you

×