SlideShare ist ein Scribd-Unternehmen logo
1 von 31
@patrickstox #DTDconf
Troubleshooting SEO for modern JS frameworks
@patrickstox #DTDconf
Who is Patrick Stox
Technical SEO for IBM - Opinions expressed are my own and not those of IBM.
I write, mainly for Search Engine Land
I speak at some conferences like this one, SMX, Pubcon, TechSEO Boost, etc.
Organizer for the Raleigh SEO Meetup (most successful in US)
We also run a conference, the Raleigh SEO Conference
Also the Beer & SEO Meetup (because beer)
2017 US Search Awards Judge, 2017 UK Search Awards Judge
2018 Interactive Marketing Awards Judge
Some of you may know me from the Wix SEO Hero contest (I got disqualified
https://beanseohero.com/)
@patrickstox #DTDconf
Why do SEOs need to learn about JS?
@patrickstox #DTDconf
WordPress is replacing their TinyMCE editor with Gutenberg built in React
The content blocks make it into more of a page builder
@patrickstox #DTDconf
Be prepared
Devs will focus on build and functionality and SEO and accessibility are afterthoughts.
Many of these folks are devs who haven’t had to work with SEOs before.
Counterpoint: many SEOs haven’t worked with JS or these devs.
@patrickstox #DTDconf
What’s an SEO to do?
@patrickstox #DTDconf
Find out about the setup, what framework, how is it rendering?
• Server-Side Rendering (SSR) – renders on demand from the server
• Pre-Rendering – a headless browser records the DOM (Document Object Model) and
creates an HTML snapshot. Like SSR, but done pre-deployment. Prerender.io,
BromBone, PhantomJS
• Client-Side Rendering – rendered in the users browser
• Isomorphic or Universal – Serves a rendered version on load but then replaces with JS
for subsequent loads.
@patrickstox #DTDconf
What should I use?
• Server-Side Rendering (SSR) – slower TTFB unless you cache, will work for the ~2% of
users with JS disabled.
• Pre-Rendering – may not serve the latest version, doesn’t allow for personalization, will
work for the ~2% of users with JS disabled.
• Client-Side Rendering - longer to load but everything is available and can be changed
quickly. A loading image is typically used but you may see a blank page.
• Isomorphic or Universal - This is probably the best setup, but it can be a lot of resources
to load.
@patrickstox #DTDconf
Can I detect the User Agent and serve an image only to Googlebot?
Sort of. It’s technically cloaking, but if the output is the same I would do it.
Really, make sure your output is the same.
@patrickstox #DTDconf
What about Bing or international markets?
Fabrice Canel of Bing said at Pubcon Vegas in 2017 that Bing processes JS. (be wary)
If you’re in Asian markets you’re out of luck for now.
I’d still prefer to use Isomorphic or Universal.
@patrickstox #DTDconf
URLs
Most of the frameworks have a router allowing you to customize URLs.
/en/us?Topics%5B0%5D%5B0%5D=cat.topic%3Ainfrastructure
Create patterns to match /{language}/{country}/{category}/{slug}
@patrickstox #DTDconf
They don’t have to change URLs to show different content
To change URLs for different content, usually History API and HTML5 pushstate() are used.
@patrickstox #DTDconf
Links
You still need <a href=
ng-click, href=“javascript:void(0);” – these won’t be seen as links
@patrickstox #DTDconf
Noscript
If you put something in <noscript> it’s probably going to be ignored.
@patrickstox #DTDconf
It’s hard to 404
You can add a noindex to any error pages along with a message. Will be treated as a soft-
404.
JS redirect to an actual 404 page that returns the status code.
Create a 404 Route.
@patrickstox #DTDconf
Things start to get interesting…
@patrickstox #DTDconf
View Source gets you this:
<!DOCTYPE html><html><head><meta charSet="utf-8" class="next-head"/><script class="next-
head">window.NREUM||(NREUM={});NREUM.info = {"agent":"","beacon":"bam.nr-data.net","errorBeacon":"bam.nr-
data.net","licenseKey":"2961bc4e3a","applicationID":"103427480","applicationTime":0.347295,"transactionName":"YQdSMU
cDXEMAVEUMClhNcxBGFl1dTkBUCQZZD1U=","queueTime":0,"ttGuid":"8aaa5aa3717120","agentToken":null};
(window.NREUM||(NREUM={})).loader_config={xpid:"VQIHUVBSCRABVFJWBQYDXlQ="};window.NREUM||(NREUM={}),_
_nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return
r(o||e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var
o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,e,n){function r(t){try{c.console&&console.log(t)}catch(e){}}var
o,i=t("ee"),a=t(20),c={};try{o=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof
console.log&&(c.console=!0,o.indexOf("dev")!==-1&&(c.dev=!0),o.indexOf("nr_dev")!==-
1&&(c.nrDev=!0))}catch(s){}c.nrDev&&i.on("internal-error",function(t){r(t.stack)}),c.dev&&i.on("fn-
err",function(t,e,n){r(n.stack)}),c.dev&&(r("NR AGENT IN DEVELOPMENT MODE"),r("flags: "+a(c,function(t,e){return
t}).join(", ")))},{}],2:[function(t,e,n){function r(t,e,n,r,c){try{h?h-=1:o(c||new
UncaughtException(t,e,n),!0)}catch(f){try{i("ierr",[f,s.now(),!0])}catch(d){}}return"function"==typeof
u&&u.apply(this,a(arguments))}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional
@patrickstox #DTDconf
Source and Google’s Cache
Both the source code and Google’s cache are raw HTML, before JS is processed.
You can’t rely on these when working with JS.
@patrickstox #DTDconf
Inspect or Inspect Element
Viewing the DOM shows you the HTML after the JS has been processed.
If you want to make sure Google sees it, load in the DOM by default without needing an
action like click or scroll.
@patrickstox #DTDconf
Render a page as Googlebot
• Google Search Console / Fetch and Render - renders a page with the real Googlebot as
either desktop or mobile, lists blocked / unreachable resources. Lets you submit rendered
pages to Google search for indexing. This is stricter than the system normally used.
• Google Mobile Friendly Test - renders a page with smartphone Googlebot.
• Merkle Fetch and Render - fetch & render a page with any bot
• Google Rich Results Test shows rendered DOM >
Crawlers: Screaming Frog, Sitebulb, Botify
@patrickstox #DTDconf
To check indexing
Search Google:
site:domain.com “use a snippet of text from your page”
@patrickstox #DTDconf
It’s not quite that simple
@patrickstox #DTDconf
What may be indexed 1st is HTML, before the render happens
So you may not find what’s in your site: search yet.
You’ll see errors in the GSC HTML Improvements Report.
You might need to check the source code vs the DOM to see what will change once the Web
Rendering Service (WRS) renders the page.
Nofollow added via JS is a bad idea because it may show as follow before rendered.
Internal links may not be picked up and added to crawl before the render happens.
We setup a test site in October and couldn’t get everything indexed, but we put it live
and everything was fine. Google may not want to crawl everything on a test site.
If you need the information indexed fast, Use server-side rendering or pre-rendering
@patrickstox #DTDconf
Experiments in June 2017 – Slack log
"user": "U0SB51WPJ",
"text": "I requested it and the timing puts 2 different bots there. Mozilla/5.0 (compatible; Googlebot/2.1;
+<http://www.google.com/bot.html>) and Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko;
Google Search Console) Chrome/41.0.2272.118 Safari/537.36",
"ts": "1496434137.849731"
"user": "U2FNA0DQB",
"text": "So it's possible that the same user agent that we know as console - when we request it manually - is the same
user agent we'd see when they hit us with the simlauted browser on their own without us manually doing via fetch",
"ts": "1496434501.951224"
"user": "U0SB51WPJ",
"text": "^thinking about this a second, GSC shows how googlebot saw and how a visitor saw the page, so first is google
and second is the second tab for how visitors saw the page.",
"ts": "1496434516.955902"
@patrickstox #DTDconf
Conclusion:
@patrickstox #DTDconf
Confirmed in August
https://developers.google.com/search/docs/guides/rendering
@patrickstox #DTDconf
Highlights:
Googlebot and WRS only speaks HTTP/1.x and FTP, with and without TLS.
For rendering, Googlebot is stateless: Local Storage, Session Storage, HTTP Cookies are all
cleared across page loads
Not available: Service Workers, IndexedDB, WebGL, WebSQL, Fetch, ES6 / ECMAScript 6
support
ES6 transpile to ES5 for now (thanks Bartosz!)
Recommend using feature detection and Polyfills & treat Googlebot like any browser
WRS declines permission requests like Camera API, Geolocation API, and Notifications API.
Googlebot and WRS continuously analyze and identify resources that don’t contribute to
essential page content and may not fetch such resources.
@patrickstox #DTDconf
Tracking Errors and Debugging
https://developers.google.com/search/docs/guides/debug-rendering
You can also download Chrome 41.
@patrickstox #DTDconf
Myth busting
Because of this experiment from Max Prin, most people believe that Googlebot will only wait
5 seconds for a page to load. https://maxxeight.com/tests/js-timer/
@patrickstox #DTDconf
What else we know
Mostly crawls from West Coast US (Mountain View).
According to Gary Illyes at SMX Advanced they don’t throttle speeds when checking mobile
sites.
They are very aggressive with caching everything (you may want to use file versioning).
In fact, because of the caching and you know being a bot and all, they actually run things as
fast as they can with a sped up clock. Check out this post from Tom Anthony
http://www.tomanthony.co.uk/blog/googlebot-javascript-random/
Mobile Googlebot's screen size is 431 X 731 and Google resizes to 12,140 pixels high, while
the desktop version is 768 X 1024 but Google only resizes to 9,307 pixels high. Check out
JR Oakes https://codeseo.io/console-log-hacking-for-googlebot/ This can screw with you in
GSC Fetch and Render if you resize images based on height.
@patrickstox #DTDconf
Thank You, that’s it for me.
Now ask Bartosz all of your questions.

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Veronika bSEO-Googles-MUM-Speaker-Slides.pptx
Veronika bSEO-Googles-MUM-Speaker-Slides.pptxVeronika bSEO-Googles-MUM-Speaker-Slides.pptx
Veronika bSEO-Googles-MUM-Speaker-Slides.pptx
 
Win the SERPs: A story of SERP Feature trends by industry, keyword and device
Win the SERPs: A story of SERP Feature trends by industry, keyword and deviceWin the SERPs: A story of SERP Feature trends by industry, keyword and device
Win the SERPs: A story of SERP Feature trends by industry, keyword and device
 
Freddy Krueger's Guide to Scary Good Reporting
Freddy Krueger's Guide to Scary Good ReportingFreddy Krueger's Guide to Scary Good Reporting
Freddy Krueger's Guide to Scary Good Reporting
 
Diginius - DuckDuckGo, Privacy and the Future of Search
Diginius - DuckDuckGo, Privacy and the Future of Search Diginius - DuckDuckGo, Privacy and the Future of Search
Diginius - DuckDuckGo, Privacy and the Future of Search
 
Corrie Jones BrightonSEO deck
Corrie Jones BrightonSEO deckCorrie Jones BrightonSEO deck
Corrie Jones BrightonSEO deck
 
Debugging rendering problems at scale
Debugging rendering problems at scaleDebugging rendering problems at scale
Debugging rendering problems at scale
 
The Quickest Win in SEO – How to do Internal Linking the Right Way
The Quickest Win in SEO – How to do Internal Linking the Right WayThe Quickest Win in SEO – How to do Internal Linking the Right Way
The Quickest Win in SEO – How to do Internal Linking the Right Way
 
How to Incorporate ML in your SERP Analysis, Lazarina Stoy -BrightonSEO Oct, ...
How to Incorporate ML in your SERP Analysis, Lazarina Stoy -BrightonSEO Oct, ...How to Incorporate ML in your SERP Analysis, Lazarina Stoy -BrightonSEO Oct, ...
How to Incorporate ML in your SERP Analysis, Lazarina Stoy -BrightonSEO Oct, ...
 
BrightonSEO - SearchPilot - Will Critchlow - Lessons from 100s of SEO tests
BrightonSEO - SearchPilot - Will Critchlow - Lessons from 100s of SEO testsBrightonSEO - SearchPilot - Will Critchlow - Lessons from 100s of SEO tests
BrightonSEO - SearchPilot - Will Critchlow - Lessons from 100s of SEO tests
 
Brighton SEO - Luis Bueno Tabernero - How to do an ASO Audit like in the 90's...
Brighton SEO - Luis Bueno Tabernero - How to do an ASO Audit like in the 90's...Brighton SEO - Luis Bueno Tabernero - How to do an ASO Audit like in the 90's...
Brighton SEO - Luis Bueno Tabernero - How to do an ASO Audit like in the 90's...
 
Paige Hobart - How to do GOOD Keyword Research - Search Advertising Show 2021
Paige Hobart - How to do GOOD Keyword Research - Search Advertising Show 2021Paige Hobart - How to do GOOD Keyword Research - Search Advertising Show 2021
Paige Hobart - How to do GOOD Keyword Research - Search Advertising Show 2021
 
How to get more traffic with less content - BrightonSEO
How to get more traffic with less content - BrightonSEOHow to get more traffic with less content - BrightonSEO
How to get more traffic with less content - BrightonSEO
 
BrightonSEO October 2022 - Dan Taylor SEO - Indexing Ecommerce Websites
BrightonSEO October 2022 - Dan Taylor SEO - Indexing Ecommerce WebsitesBrightonSEO October 2022 - Dan Taylor SEO - Indexing Ecommerce Websites
BrightonSEO October 2022 - Dan Taylor SEO - Indexing Ecommerce Websites
 
BrightonSEO - Master Crawl Budget Optimization for Enterprise Websites
BrightonSEO - Master Crawl Budget Optimization for Enterprise WebsitesBrightonSEO - Master Crawl Budget Optimization for Enterprise Websites
BrightonSEO - Master Crawl Budget Optimization for Enterprise Websites
 
Speed up alt text generation without coding skills
Speed up alt text generation without coding skillsSpeed up alt text generation without coding skills
Speed up alt text generation without coding skills
 
How to be the ultimate double agent- PR and Link Builder Isa Lavahun BTNSEO S...
How to be the ultimate double agent- PR and Link Builder Isa Lavahun BTNSEO S...How to be the ultimate double agent- PR and Link Builder Isa Lavahun BTNSEO S...
How to be the ultimate double agent- PR and Link Builder Isa Lavahun BTNSEO S...
 
BrightonSEO slide deck Oct 2022 - Levi Williams-Clucas - Review Generation an...
BrightonSEO slide deck Oct 2022 - Levi Williams-Clucas - Review Generation an...BrightonSEO slide deck Oct 2022 - Levi Williams-Clucas - Review Generation an...
BrightonSEO slide deck Oct 2022 - Levi Williams-Clucas - Review Generation an...
 
How To EAT Links.pptx
How To EAT Links.pptxHow To EAT Links.pptx
How To EAT Links.pptx
 
EAT: Have We Been Looking At It Backwards
EAT: Have We Been Looking At It BackwardsEAT: Have We Been Looking At It Backwards
EAT: Have We Been Looking At It Backwards
 
Brighton SEO April 2022 - Automate the technical SEO stuff
Brighton SEO April 2022 - Automate the technical SEO stuffBrighton SEO April 2022 - Automate the technical SEO stuff
Brighton SEO April 2022 - Automate the technical SEO stuff
 

Ähnlich wie Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018

Optimising Web Application Frontend
Optimising Web Application FrontendOptimising Web Application Frontend
Optimising Web Application Frontend
tkramar
 

Ähnlich wie Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018 (20)

JavaScript SEO Ungagged 2019 Patrick Stox
JavaScript SEO Ungagged 2019 Patrick StoxJavaScript SEO Ungagged 2019 Patrick Stox
JavaScript SEO Ungagged 2019 Patrick Stox
 
SMX Advanced 2018 SEO for Javascript Frameworks by Patrick Stox
SMX Advanced 2018 SEO for Javascript Frameworks by Patrick StoxSMX Advanced 2018 SEO for Javascript Frameworks by Patrick Stox
SMX Advanced 2018 SEO for Javascript Frameworks by Patrick Stox
 
Shifting Gears
Shifting GearsShifting Gears
Shifting Gears
 
SMX_DevTools_Monaco_2.pdf
SMX_DevTools_Monaco_2.pdfSMX_DevTools_Monaco_2.pdf
SMX_DevTools_Monaco_2.pdf
 
Everything That Can Go Wrong Will Go Wrong - Tech SEO Boost 2017 - Patrick Stox
Everything That Can Go Wrong Will Go Wrong - Tech SEO Boost 2017 - Patrick StoxEverything That Can Go Wrong Will Go Wrong - Tech SEO Boost 2017 - Patrick Stox
Everything That Can Go Wrong Will Go Wrong - Tech SEO Boost 2017 - Patrick Stox
 
SEO for Large Websites
SEO for Large WebsitesSEO for Large Websites
SEO for Large Websites
 
What is HTML 5?
What is HTML 5?What is HTML 5?
What is HTML 5?
 
Intro to mobile web application development
Intro to mobile web application developmentIntro to mobile web application development
Intro to mobile web application development
 
SearchLove San Diego 2018 | Mat Clayton | Site Speed for Digital Marketers
SearchLove San Diego 2018 | Mat Clayton | Site Speed for Digital MarketersSearchLove San Diego 2018 | Mat Clayton | Site Speed for Digital Marketers
SearchLove San Diego 2018 | Mat Clayton | Site Speed for Digital Marketers
 
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考えるIt is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
It is not HTML5. but ... / HTML5ではないサイトからHTML5を考える
 
Advanced Web Scraping or How To Make Internet Your Database #seoplus2018
Advanced Web Scraping or How To Make Internet Your Database #seoplus2018Advanced Web Scraping or How To Make Internet Your Database #seoplus2018
Advanced Web Scraping or How To Make Internet Your Database #seoplus2018
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
Optimising Web Application Frontend
Optimising Web Application FrontendOptimising Web Application Frontend
Optimising Web Application Frontend
 
PrairieDevCon 2014 - Web Doesn't Mean Slow
PrairieDevCon 2014 -  Web Doesn't Mean SlowPrairieDevCon 2014 -  Web Doesn't Mean Slow
PrairieDevCon 2014 - Web Doesn't Mean Slow
 
Google I/O 2012 - Protecting your user experience while integrating 3rd party...
Google I/O 2012 - Protecting your user experience while integrating 3rd party...Google I/O 2012 - Protecting your user experience while integrating 3rd party...
Google I/O 2012 - Protecting your user experience while integrating 3rd party...
 
Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"Stefan Judis "Did we(b development) lose the right direction?"
Stefan Judis "Did we(b development) lose the right direction?"
 
How Search Works
How Search WorksHow Search Works
How Search Works
 
Log analysis and pro use cases for search marketers online version (1)
Log analysis and pro use cases for search marketers online version (1)Log analysis and pro use cases for search marketers online version (1)
Log analysis and pro use cases for search marketers online version (1)
 
How can a data layer help my seo
How can a data layer help my seoHow can a data layer help my seo
How can a data layer help my seo
 
Welcome to a new reality - DeepCrawl Webinar 2018
Welcome to a new reality - DeepCrawl Webinar 2018Welcome to a new reality - DeepCrawl Webinar 2018
Welcome to a new reality - DeepCrawl Webinar 2018
 

Mehr von patrickstox

How to find other affiliates most successful content patrick stox
How to find other affiliates most successful content patrick stoxHow to find other affiliates most successful content patrick stox
How to find other affiliates most successful content patrick stox
patrickstox
 

Mehr von patrickstox (20)

A crash course into SEO and what moves the needle with scalable processes
A crash course into SEO and what moves the needle with scalable processesA crash course into SEO and what moves the needle with scalable processes
A crash course into SEO and what moves the needle with scalable processes
 
Where to focus your SEO efforts to have the most impact Digital Summit Atlant...
Where to focus your SEO efforts to have the most impact Digital Summit Atlant...Where to focus your SEO efforts to have the most impact Digital Summit Atlant...
Where to focus your SEO efforts to have the most impact Digital Summit Atlant...
 
Raleigh seo-most-valuable-seo-presentation-patrick-stox
Raleigh seo-most-valuable-seo-presentation-patrick-stoxRaleigh seo-most-valuable-seo-presentation-patrick-stox
Raleigh seo-most-valuable-seo-presentation-patrick-stox
 
Page Experience Update TMC June 2021 Patrick Stox
Page Experience Update TMC June 2021 Patrick StoxPage Experience Update TMC June 2021 Patrick Stox
Page Experience Update TMC June 2021 Patrick Stox
 
Nofollow UGC Sponsored SEO From Home Patrick Stox Ahrefs
Nofollow UGC Sponsored SEO From Home Patrick Stox AhrefsNofollow UGC Sponsored SEO From Home Patrick Stox Ahrefs
Nofollow UGC Sponsored SEO From Home Patrick Stox Ahrefs
 
Nofollow UGC Sponsored SMX West 2020 Patrick Stox
Nofollow UGC Sponsored SMX West 2020 Patrick StoxNofollow UGC Sponsored SMX West 2020 Patrick Stox
Nofollow UGC Sponsored SMX West 2020 Patrick Stox
 
How to find other affiliates most successful content patrick stox
How to find other affiliates most successful content patrick stoxHow to find other affiliates most successful content patrick stox
How to find other affiliates most successful content patrick stox
 
Data Visualization for SEO
Data Visualization for SEOData Visualization for SEO
Data Visualization for SEO
 
International SEO: The Weird Technical Parts - Pubcon Vegas 2019 Patrick Stox
International SEO: The Weird Technical Parts - Pubcon Vegas 2019 Patrick StoxInternational SEO: The Weird Technical Parts - Pubcon Vegas 2019 Patrick Stox
International SEO: The Weird Technical Parts - Pubcon Vegas 2019 Patrick Stox
 
React JS and Search Engines - Patrick Stox at Triangle ReactJS Meetup
React JS and Search Engines - Patrick Stox at Triangle ReactJS MeetupReact JS and Search Engines - Patrick Stox at Triangle ReactJS Meetup
React JS and Search Engines - Patrick Stox at Triangle ReactJS Meetup
 
Things Google Tries To Correct For You - SMX Advanced 2019 Insights Sessions ...
Things Google Tries To Correct For You - SMX Advanced 2019 Insights Sessions ...Things Google Tries To Correct For You - SMX Advanced 2019 Insights Sessions ...
Things Google Tries To Correct For You - SMX Advanced 2019 Insights Sessions ...
 
Website Migrations at SMX Munich 2019 - Patrick Stox
Website Migrations at SMX Munich 2019 - Patrick StoxWebsite Migrations at SMX Munich 2019 - Patrick Stox
Website Migrations at SMX Munich 2019 - Patrick Stox
 
SMX Advanced 2018 Solving Complex SEO Problems by Patrick Stox
SMX Advanced 2018 Solving Complex SEO Problems by Patrick StoxSMX Advanced 2018 Solving Complex SEO Problems by Patrick Stox
SMX Advanced 2018 Solving Complex SEO Problems by Patrick Stox
 
Troubleshooting Technical SEO Problems - Patrick Stox - Raleigh SEO Meetup
Troubleshooting Technical SEO Problems - Patrick Stox - Raleigh SEO MeetupTroubleshooting Technical SEO Problems - Patrick Stox - Raleigh SEO Meetup
Troubleshooting Technical SEO Problems - Patrick Stox - Raleigh SEO Meetup
 
AMP for Enterprises - SMX West - Patrick Stox
AMP for Enterprises - SMX West - Patrick StoxAMP for Enterprises - SMX West - Patrick Stox
AMP for Enterprises - SMX West - Patrick Stox
 
Pubcon Vegas 2017 You're Going To Screw Up International SEO - Patrick Stox
Pubcon Vegas 2017 You're Going To Screw Up International SEO - Patrick StoxPubcon Vegas 2017 You're Going To Screw Up International SEO - Patrick Stox
Pubcon Vegas 2017 You're Going To Screw Up International SEO - Patrick Stox
 
Mobile First Indexing - SMX Advanced 2017 - Patrick Stox
Mobile First Indexing - SMX Advanced 2017 - Patrick StoxMobile First Indexing - SMX Advanced 2017 - Patrick Stox
Mobile First Indexing - SMX Advanced 2017 - Patrick Stox
 
A Technical Look at Content - PUBCON SFIMA 2017 - Patrick Stox
A Technical Look at Content - PUBCON SFIMA 2017 - Patrick StoxA Technical Look at Content - PUBCON SFIMA 2017 - Patrick Stox
A Technical Look at Content - PUBCON SFIMA 2017 - Patrick Stox
 
Better Safe Than Sorry with HTTPS - SMX East 2016 - Patrick Stox
Better Safe Than Sorry with HTTPS - SMX East 2016 - Patrick StoxBetter Safe Than Sorry with HTTPS - SMX East 2016 - Patrick Stox
Better Safe Than Sorry with HTTPS - SMX East 2016 - Patrick Stox
 
Google's Top 3 Ranking Factors - Content, Links, and RankBrain - Raleigh SEO ...
Google's Top 3 Ranking Factors - Content, Links, and RankBrain - Raleigh SEO ...Google's Top 3 Ranking Factors - Content, Links, and RankBrain - Raleigh SEO ...
Google's Top 3 Ranking Factors - Content, Links, and RankBrain - Raleigh SEO ...
 

Kürzlich hochgeladen

4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN
4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN
4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN
Cara Menggugurkan Kandungan 087776558899
 
Mastering Affiliate Marketing: A Comprehensive Guide to Success
Mastering Affiliate Marketing: A Comprehensive Guide to SuccessMastering Affiliate Marketing: A Comprehensive Guide to Success
Mastering Affiliate Marketing: A Comprehensive Guide to Success
Abdulsamad Lukman
 

Kürzlich hochgeladen (20)

Hannah Brady - Powering Up Your Brand with Content @ Force24 All leads
Hannah Brady - Powering Up Your Brand with Content @ Force24 All leadsHannah Brady - Powering Up Your Brand with Content @ Force24 All leads
Hannah Brady - Powering Up Your Brand with Content @ Force24 All leads
 
Unlocking the Mystery of the Voynich Manuscript
Unlocking the Mystery of the Voynich ManuscriptUnlocking the Mystery of the Voynich Manuscript
Unlocking the Mystery of the Voynich Manuscript
 
Unveiling the Legacy of the Rosetta stone A Key to Ancient Knowledge.pptx
Unveiling the Legacy of the Rosetta stone A Key to Ancient Knowledge.pptxUnveiling the Legacy of the Rosetta stone A Key to Ancient Knowledge.pptx
Unveiling the Legacy of the Rosetta stone A Key to Ancient Knowledge.pptx
 
Alpha Media March 2024 Buyers Guide.pptx
Alpha Media March 2024 Buyers Guide.pptxAlpha Media March 2024 Buyers Guide.pptx
Alpha Media March 2024 Buyers Guide.pptx
 
Optimizing Your Marketing with AI-Powered Prompts
Optimizing Your Marketing with AI-Powered PromptsOptimizing Your Marketing with AI-Powered Prompts
Optimizing Your Marketing with AI-Powered Prompts
 
Aiizennxqc Digital Marketing | SEO & SMM
Aiizennxqc Digital Marketing | SEO & SMMAiizennxqc Digital Marketing | SEO & SMM
Aiizennxqc Digital Marketing | SEO & SMM
 
Elevate Your Advertising Game: Introducing Billion Broadcaster Lift Advertising
Elevate Your Advertising Game: Introducing Billion Broadcaster Lift AdvertisingElevate Your Advertising Game: Introducing Billion Broadcaster Lift Advertising
Elevate Your Advertising Game: Introducing Billion Broadcaster Lift Advertising
 
SALES-PITCH-an-introduction-to-sales.pptx
SALES-PITCH-an-introduction-to-sales.pptxSALES-PITCH-an-introduction-to-sales.pptx
SALES-PITCH-an-introduction-to-sales.pptx
 
Discover Ardency Elite: Elevate Your Lifestyle
Discover Ardency Elite: Elevate Your LifestyleDiscover Ardency Elite: Elevate Your Lifestyle
Discover Ardency Elite: Elevate Your Lifestyle
 
Social Media Marketing Portfolio - Maharsh Benday
Social Media Marketing Portfolio - Maharsh BendaySocial Media Marketing Portfolio - Maharsh Benday
Social Media Marketing Portfolio - Maharsh Benday
 
[Expert Panel] New Google Shopping Ads Strategies Uncovered
[Expert Panel] New Google Shopping Ads Strategies Uncovered[Expert Panel] New Google Shopping Ads Strategies Uncovered
[Expert Panel] New Google Shopping Ads Strategies Uncovered
 
4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN
4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN
4 TRIK CARA MENGGUGURKAN JANIN ATAU ABORSI KANDUNGAN
 
Martal Group - B2B Lead Gen Agency - Onboarding Overview
Martal Group - B2B Lead Gen Agency - Onboarding OverviewMartal Group - B2B Lead Gen Agency - Onboarding Overview
Martal Group - B2B Lead Gen Agency - Onboarding Overview
 
Enhancing Business Visibility PR Firms in San Francisco
Enhancing Business Visibility PR Firms in San FranciscoEnhancing Business Visibility PR Firms in San Francisco
Enhancing Business Visibility PR Firms in San Francisco
 
Micro-Choices, Max Impact Personalizing Your Journey, One Moment at a Time.pdf
Micro-Choices, Max Impact Personalizing Your Journey, One Moment at a Time.pdfMicro-Choices, Max Impact Personalizing Your Journey, One Moment at a Time.pdf
Micro-Choices, Max Impact Personalizing Your Journey, One Moment at a Time.pdf
 
Cartona.pptx. Marketing how to present your project very well , discussed a...
Cartona.pptx.   Marketing how to present your project very well , discussed a...Cartona.pptx.   Marketing how to present your project very well , discussed a...
Cartona.pptx. Marketing how to present your project very well , discussed a...
 
Digital-Marketing-Into-by-Zoraiz-Ahmad.pptx
Digital-Marketing-Into-by-Zoraiz-Ahmad.pptxDigital-Marketing-Into-by-Zoraiz-Ahmad.pptx
Digital-Marketing-Into-by-Zoraiz-Ahmad.pptx
 
W.H.Bender Quote 61 -Influential restaurant and food service industry network...
W.H.Bender Quote 61 -Influential restaurant and food service industry network...W.H.Bender Quote 61 -Influential restaurant and food service industry network...
W.H.Bender Quote 61 -Influential restaurant and food service industry network...
 
Mastering Affiliate Marketing: A Comprehensive Guide to Success
Mastering Affiliate Marketing: A Comprehensive Guide to SuccessMastering Affiliate Marketing: A Comprehensive Guide to Success
Mastering Affiliate Marketing: A Comprehensive Guide to Success
 
VIP Call Girls Dongri WhatsApp +91-9833363713, Full Night Service
VIP Call Girls Dongri WhatsApp +91-9833363713, Full Night ServiceVIP Call Girls Dongri WhatsApp +91-9833363713, Full Night Service
VIP Call Girls Dongri WhatsApp +91-9833363713, Full Night Service
 

Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018

  • 1. @patrickstox #DTDconf Troubleshooting SEO for modern JS frameworks
  • 2. @patrickstox #DTDconf Who is Patrick Stox Technical SEO for IBM - Opinions expressed are my own and not those of IBM. I write, mainly for Search Engine Land I speak at some conferences like this one, SMX, Pubcon, TechSEO Boost, etc. Organizer for the Raleigh SEO Meetup (most successful in US) We also run a conference, the Raleigh SEO Conference Also the Beer & SEO Meetup (because beer) 2017 US Search Awards Judge, 2017 UK Search Awards Judge 2018 Interactive Marketing Awards Judge Some of you may know me from the Wix SEO Hero contest (I got disqualified https://beanseohero.com/)
  • 3. @patrickstox #DTDconf Why do SEOs need to learn about JS?
  • 4. @patrickstox #DTDconf WordPress is replacing their TinyMCE editor with Gutenberg built in React The content blocks make it into more of a page builder
  • 5. @patrickstox #DTDconf Be prepared Devs will focus on build and functionality and SEO and accessibility are afterthoughts. Many of these folks are devs who haven’t had to work with SEOs before. Counterpoint: many SEOs haven’t worked with JS or these devs.
  • 7. @patrickstox #DTDconf Find out about the setup, what framework, how is it rendering? • Server-Side Rendering (SSR) – renders on demand from the server • Pre-Rendering – a headless browser records the DOM (Document Object Model) and creates an HTML snapshot. Like SSR, but done pre-deployment. Prerender.io, BromBone, PhantomJS • Client-Side Rendering – rendered in the users browser • Isomorphic or Universal – Serves a rendered version on load but then replaces with JS for subsequent loads.
  • 8. @patrickstox #DTDconf What should I use? • Server-Side Rendering (SSR) – slower TTFB unless you cache, will work for the ~2% of users with JS disabled. • Pre-Rendering – may not serve the latest version, doesn’t allow for personalization, will work for the ~2% of users with JS disabled. • Client-Side Rendering - longer to load but everything is available and can be changed quickly. A loading image is typically used but you may see a blank page. • Isomorphic or Universal - This is probably the best setup, but it can be a lot of resources to load.
  • 9. @patrickstox #DTDconf Can I detect the User Agent and serve an image only to Googlebot? Sort of. It’s technically cloaking, but if the output is the same I would do it. Really, make sure your output is the same.
  • 10. @patrickstox #DTDconf What about Bing or international markets? Fabrice Canel of Bing said at Pubcon Vegas in 2017 that Bing processes JS. (be wary) If you’re in Asian markets you’re out of luck for now. I’d still prefer to use Isomorphic or Universal.
  • 11. @patrickstox #DTDconf URLs Most of the frameworks have a router allowing you to customize URLs. /en/us?Topics%5B0%5D%5B0%5D=cat.topic%3Ainfrastructure Create patterns to match /{language}/{country}/{category}/{slug}
  • 12. @patrickstox #DTDconf They don’t have to change URLs to show different content To change URLs for different content, usually History API and HTML5 pushstate() are used.
  • 13. @patrickstox #DTDconf Links You still need <a href= ng-click, href=“javascript:void(0);” – these won’t be seen as links
  • 14. @patrickstox #DTDconf Noscript If you put something in <noscript> it’s probably going to be ignored.
  • 15. @patrickstox #DTDconf It’s hard to 404 You can add a noindex to any error pages along with a message. Will be treated as a soft- 404. JS redirect to an actual 404 page that returns the status code. Create a 404 Route.
  • 16. @patrickstox #DTDconf Things start to get interesting…
  • 17. @patrickstox #DTDconf View Source gets you this: <!DOCTYPE html><html><head><meta charSet="utf-8" class="next-head"/><script class="next- head">window.NREUM||(NREUM={});NREUM.info = {"agent":"","beacon":"bam.nr-data.net","errorBeacon":"bam.nr- data.net","licenseKey":"2961bc4e3a","applicationID":"103427480","applicationTime":0.347295,"transactionName":"YQdSMU cDXEMAVEUMClhNcxBGFl1dTkBUCQZZD1U=","queueTime":0,"ttGuid":"8aaa5aa3717120","agentToken":null}; (window.NREUM||(NREUM={})).loader_config={xpid:"VQIHUVBSCRABVFJWBQYDXlQ="};window.NREUM||(NREUM={}),_ _nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o||e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,e,n){function r(t){try{c.console&&console.log(t)}catch(e){}}var o,i=t("ee"),a=t(20),c={};try{o=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(c.console=!0,o.indexOf("dev")!==-1&&(c.dev=!0),o.indexOf("nr_dev")!==- 1&&(c.nrDev=!0))}catch(s){}c.nrDev&&i.on("internal-error",function(t){r(t.stack)}),c.dev&&i.on("fn- err",function(t,e,n){r(n.stack)}),c.dev&&(r("NR AGENT IN DEVELOPMENT MODE"),r("flags: "+a(c,function(t,e){return t}).join(", ")))},{}],2:[function(t,e,n){function r(t,e,n,r,c){try{h?h-=1:o(c||new UncaughtException(t,e,n),!0)}catch(f){try{i("ierr",[f,s.now(),!0])}catch(d){}}return"function"==typeof u&&u.apply(this,a(arguments))}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional
  • 18. @patrickstox #DTDconf Source and Google’s Cache Both the source code and Google’s cache are raw HTML, before JS is processed. You can’t rely on these when working with JS.
  • 19. @patrickstox #DTDconf Inspect or Inspect Element Viewing the DOM shows you the HTML after the JS has been processed. If you want to make sure Google sees it, load in the DOM by default without needing an action like click or scroll.
  • 20. @patrickstox #DTDconf Render a page as Googlebot • Google Search Console / Fetch and Render - renders a page with the real Googlebot as either desktop or mobile, lists blocked / unreachable resources. Lets you submit rendered pages to Google search for indexing. This is stricter than the system normally used. • Google Mobile Friendly Test - renders a page with smartphone Googlebot. • Merkle Fetch and Render - fetch & render a page with any bot • Google Rich Results Test shows rendered DOM > Crawlers: Screaming Frog, Sitebulb, Botify
  • 21. @patrickstox #DTDconf To check indexing Search Google: site:domain.com “use a snippet of text from your page”
  • 22. @patrickstox #DTDconf It’s not quite that simple
  • 23. @patrickstox #DTDconf What may be indexed 1st is HTML, before the render happens So you may not find what’s in your site: search yet. You’ll see errors in the GSC HTML Improvements Report. You might need to check the source code vs the DOM to see what will change once the Web Rendering Service (WRS) renders the page. Nofollow added via JS is a bad idea because it may show as follow before rendered. Internal links may not be picked up and added to crawl before the render happens. We setup a test site in October and couldn’t get everything indexed, but we put it live and everything was fine. Google may not want to crawl everything on a test site. If you need the information indexed fast, Use server-side rendering or pre-rendering
  • 24. @patrickstox #DTDconf Experiments in June 2017 – Slack log "user": "U0SB51WPJ", "text": "I requested it and the timing puts 2 different bots there. Mozilla/5.0 (compatible; Googlebot/2.1; +<http://www.google.com/bot.html>) and Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Search Console) Chrome/41.0.2272.118 Safari/537.36", "ts": "1496434137.849731" "user": "U2FNA0DQB", "text": "So it's possible that the same user agent that we know as console - when we request it manually - is the same user agent we'd see when they hit us with the simlauted browser on their own without us manually doing via fetch", "ts": "1496434501.951224" "user": "U0SB51WPJ", "text": "^thinking about this a second, GSC shows how googlebot saw and how a visitor saw the page, so first is google and second is the second tab for how visitors saw the page.", "ts": "1496434516.955902"
  • 26. @patrickstox #DTDconf Confirmed in August https://developers.google.com/search/docs/guides/rendering
  • 27. @patrickstox #DTDconf Highlights: Googlebot and WRS only speaks HTTP/1.x and FTP, with and without TLS. For rendering, Googlebot is stateless: Local Storage, Session Storage, HTTP Cookies are all cleared across page loads Not available: Service Workers, IndexedDB, WebGL, WebSQL, Fetch, ES6 / ECMAScript 6 support ES6 transpile to ES5 for now (thanks Bartosz!) Recommend using feature detection and Polyfills & treat Googlebot like any browser WRS declines permission requests like Camera API, Geolocation API, and Notifications API. Googlebot and WRS continuously analyze and identify resources that don’t contribute to essential page content and may not fetch such resources.
  • 28. @patrickstox #DTDconf Tracking Errors and Debugging https://developers.google.com/search/docs/guides/debug-rendering You can also download Chrome 41.
  • 29. @patrickstox #DTDconf Myth busting Because of this experiment from Max Prin, most people believe that Googlebot will only wait 5 seconds for a page to load. https://maxxeight.com/tests/js-timer/
  • 30. @patrickstox #DTDconf What else we know Mostly crawls from West Coast US (Mountain View). According to Gary Illyes at SMX Advanced they don’t throttle speeds when checking mobile sites. They are very aggressive with caching everything (you may want to use file versioning). In fact, because of the caching and you know being a bot and all, they actually run things as fast as they can with a sped up clock. Check out this post from Tom Anthony http://www.tomanthony.co.uk/blog/googlebot-javascript-random/ Mobile Googlebot's screen size is 431 X 731 and Google resizes to 12,140 pixels high, while the desktop version is 768 X 1024 but Google only resizes to 9,307 pixels high. Check out JR Oakes https://codeseo.io/console-log-hacking-for-googlebot/ This can screw with you in GSC Fetch and Render if you resize images based on height.
  • 31. @patrickstox #DTDconf Thank You, that’s it for me. Now ask Bartosz all of your questions.

Hinweis der Redaktion

  1. Devs love JS and all that goes with it More websites are transitioning
  2. SSR on-demand TTFB is slower Headless browser that executes a page and records the DOM (HTML Snapshot). can be old version. Doesn't allow for personalization. It’s pretty much the same concept as SSR except it’s done pre-deployment in your development environment, not a live server. Prerender.io, brombone, phantomjs