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.

SearchLeeds 2019 - Fabrizio Ballarini - TransferWise - Building, hacking and killing a bespoke CMS

155 views

Published on

What if you could build a CMS with features that are made specifically to answer a specific cluster of search intents around a product. In Fabrizio's SearchLeeds talk he covers early technical learnings from building a SEO friendly CMS from ground up (how TransferWise designed ahreflang, indexing, picking the right tech stack, structured data features) but also how they now are able to scale our efforts by moving set of product pages into a dedicated service run by APIs and testing framework.

Published in: Marketing
  • Be the first to comment

  • Be the first to like this

SearchLeeds 2019 - Fabrizio Ballarini - TransferWise - Building, hacking and killing a bespoke CMS

  1. 1. Building, hacking and killing a bespoke CMS Fabrizio Ballarini
  2. 2. @Pechnet Link to slides wi.se/self-driving-CMS
  3. 3. We started SEO program back in 2016 and built @Pechnet 2 6 26 1712 3+M Custom CMS Products People strong team CountriesLanguages Indexed Pages
  4. 4. What if you could build a CMS to answer specific clusters of queries? @Pechnet
  5. 5. An out of the box CSM with a couple of SEO features is not enough @Pechnet@Pechnet
  6. 6. A high performing CMS is still driven by humans Check out: wi.se/seo-friendly-cms @Pechnet
  7. 7. What if you could build a self driving CMS? @Pechnet@Pechnet
  8. 8. Context on our challenge
  9. 9. Build a price comparison product
  10. 10. Our service covers 1300+ routes and offers 49 currencies. There are 71 countries you can send money to and 43 countries you can send money from. 100+ competitors @Pechnet
  11. 11. ~9M URLs
  12. 12. Adjust to existing organisation Remove dependencies to increase speed of execution
  13. 13. We had no acquisition built into our core product @Pechnet Built-in acquisitionNo acquisition
  14. 14. 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
  15. 15. Full stack SEO team @Pechnet Product 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 :)
  16. 16. Evalue growth levers
  17. 17. More unique pages is often the most effective answer 0 links Wikipedia Produce more content Produce content hardcore Build links first (audit existing content) Produce content first 0 content Ton of content @Pechnet
  18. 18. SEO Basic: Produce, Optimise and build links Search Volume CustomersCTR Conversion Rate WhatSEOsDO? Produce more content Optimise existing content Build links Optimise existing content Easy to measure and scale Harder to measure and scale Optimise Existing content @Pechnet
  19. 19. We growth at the speed at which we ship/optimise pages @Pechnet 3M INDEXED PAGES 🚀
  20. 20. Build your fastest route to MVPs
  21. 21. Remove dependencies
  22. 22. We decided to build “Lienzo” @Pechnet
  23. 23. We initially invested as less as we could in tech @Pechnet We didn’t port the main Angular JS calculator to our CMS, simply used an iframe All widgets are simple text + images in a limited number of layouts We leverage bootstrap of the main product for styling and design
  24. 24. You can publish pages in minutes once you have copy + creatives @Pechnet
  25. 25. Added basic SEO features
  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. Focused on features that could help us scaling internationally @Pechnet #1 Language/Country selector #2 Unique page hreflang key #3 Locale-mapping
  29. 29. Users only select language/country + unique key, Platforms does the mapping to URL locales @Pechnet Language/Country selector Unique page hreflang key Locale-mapping
  30. 30. Built in monitoring @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!
  31. 31. Optimal backend to achieve seamless workflow @Pechnet Easy access to brief & draft from writers Automatically track keywords via API
  32. 32. 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. We got faster at producing content but not fast enough! Publishing Analyst @Pechnet
  33. 33. Publishing via CMS doesn’t scale, it’s constrained by number of people in the team. Copywriters Editors Translators Publishers Keyword Data Unique page @Pechnet
  34. 34. We continue to grow linearly by publishing via CMS @Pechnet
  35. 35. The test page we quickly built proves to be successful, time to scale it! @Pechnet
  36. 36. Hack vs doing things properly
  37. 37. 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 ☢
  38. 38. Leverage APIs
  39. 39. Know your CMS, your content & structure data @Pechnet
  40. 40. 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/
  41. 41. 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
  42. 42. Scaling launches and MVPs
  43. 43. 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
  44. 44. #1: Create a template @Pechnet In JSON format, create template matching the API schema and map templated fields to variables.
  45. 45. #2: We have prepared our list of variables @Pechnet Prepare the values for templated fields in a csv like this one:
  46. 46. #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
  47. 47. #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!
  48. 48. Invest in scalable widgets to achieve feature parity with core product
  49. 49. Deeper integration with core product coupled with ability to scale through CMS API 🚀 @Pechnet
  50. 50. 🤖 APIs beat Humans 🤖 @Pechnet 👨‍🔬👩‍🔬
  51. 51. Kill CMS, autonomous product
  52. 52. We already know what we are going to build in 2 years time 2019 2020 2021 2022 Core products Validated MVPs (waiting for dev resources) Launch new products @Pechnet
  53. 53. Automate acquisition
  54. 54. Master the relationship between search intents and your product variables @Pechnet Product variables {Source Currency} {Target Currency} Example of a cluster of queries: “Send money to {Target Currency}”
  55. 55. 3 main layers that communicate with each other @Pechnet Backend APIs Frontend Widgets Frontend Apps Core product Quote service Pricing Delivery Estimation Price Comparison Send money Calculator Price Comparison Lienzo (landing page CMS) Send Money Comparison
  56. 56. Data Collection service guides creation of landing pages Comparison Widget Price Comparison Service Data Collection Service Comparison Landing pages @Pechnet
  57. 57. The product automatically generates thousand of pages as soon as data is available @Pechnet
  58. 58. Invest in product
  59. 59. 2 years of testing….and still room for improvement! @Pechnet
  60. 60. Data is the essential part of the product without data we don’t have a product, not a 10x one. @Pechnet
  61. 61. Build a 10x product that didn’t exist before @Pechnet
  62. 62. Validate Acquisition Build scalable product Launch MVP via CMS Scale via CMS APIs Launch dedicated app & scale via API Improve product Improve Conversion Rate @Pechnet
  63. 63. 2. Develop features for SEO and scale MVPs via CMS @Pechnet Start with an empowered autonomous full-stack SE0 team… 1. Build/adopt a CMS trying to eliminate dependencies and lunch pages in seconds 3. Automate with APIs what’s successful by investing into stand alone products
  64. 64. @Pechnet Link to slides >> wi.se/self-driving-cms Money without borders >> wi.se/borderless Join us >> wi.se/seo-jobs Thank you

×