SlideShare ist ein Scribd-Unternehmen logo
1 von 85
Downloaden Sie, um offline zu lesen
Debugging rendering
problems at scale
Giacomo Zecchini | Verve Search
SLIDESHARE.NET/GIACOMOZECCHINI
@GIACOMOZECCHINI
Hi, I’m Giacomo. Technical
Director at Verve Search.
Technical background and
previous experiences in
development.
@giacomozecchini
#brightonSEO
Today we are going to talk about
rendering errors, the challenges
of debugging at scale and a new
approach to solve these issues.
@giacomozecchini
#brightonSEO
The search engine's rendering
process is very similar to
Schrödinger's cat paradox.
https://en.wikipedia.org/wiki/Schrödinger's_cat
@giacomozecchini
#brightonSEO
A hypothetical cat page may be
considered simultaneously both
alive correctly rendered and
dead not correctly rendered.
@giacomozecchini
#brightonSEO
Let me explain..
@giacomozecchini
#brightonSEO
Search engines get web pages
and put them in web rendering
services.
https://developers.google.com/search/docs/guides/javascript-seo-basics
@giacomozecchini
#brightonSEO
Inside the web rendering
services, the pages are rendered
similarly to a browser.
https://developers.google.com/search/docs/guides/javascript-seo-basics
@giacomozecchini
#brightonSEO
Then, the search engines can
extract all information they
need from those rendered
pages.
https://developers.google.com/search/docs/guides/javascript-seo-basics
@giacomozecchini
#brightonSEO
This is an oversimplification of a
complex process.
https://www.youtube.com/watch?v=Qxd_d9m9vzo
@giacomozecchini
#brightonSEO
If you want to know more about
this I’d suggest to watch Martin
Splitt’s TechSEO Boost 2019
talk.
https://www.youtube.com/watch?v=Qxd_d9m9vzo
@giacomozecchini
#brightonSEO
What’s the problem
with Web Rendering
Services?
@giacomozecchini
#brightonSEO
What happens inside the web
rendering services is something
hidden from our eyes, like in a
closed box.
@giacomozecchini
#brightonSEO
You don’t know if a page has
been correctly rendered until you
check it manually.
@giacomozecchini
#brightonSEO
Search engines are capable of
rendering your pages and most
of the time the process will be
fine.
@giacomozecchini
#brightonSEO
Nonetheless, some pages have
rendering problems.
@giacomozecchini
#brightonSEO
When is a page not
correctly rendered?
@giacomozecchini
#brightonSEO
A page is “not correctly
rendered” when is not possible
for the WRS to get an asset or
when an error blocks the
process.
@giacomozecchini
#brightonSEO
Not only pages with Javascript
have problems!
@giacomozecchini
#brightonSEO
Let's have a look at a few
examples...
@giacomozecchini
#brightonSEO
HTTP / DNS / Network errors
@giacomozecchini
#brightonSEO
https://developers.google.com/search/docs/advanced/crawling/http-network-errors
Crawler
WRS
Cache
SEARCH ENGINE
* Icons made by Freepik from www.flaticon.com
Robots.txt blocks a resources
@giacomozecchini
#brightonSEO
https://developers.google.com/search/docs/advanced/robots/intro
Crawler
WRS
Cache
SEARCH ENGINE
* Icons made by Freepik from www.flaticon.com
Fetch timeout
@giacomozecchini
#brightonSEO
Crawler
WRS
Cache
SEARCH ENGINE
* this doesn’t seem very common,
but it can happen
* Icons made by Freepik from www.flaticon.com
https/http mixed content
@giacomozecchini
#brightonSEO
If your website has an HTTPS
URL but one of the Javascript
files has an HTTP URL and the
HTTPS version is not available,
the script won't be used!
Cache mismatch, user
permission for specific
features (e.g. geolocation),
service worker registration,
Javascript syntax errors, etc.
@giacomozecchini
#brightonSEO
What if a page is not
correctly rendered?
@giacomozecchini
#brightonSEO
If WRS can’t get your CSS the
page layout won’t be correct and
you may also have Mobile
Usability issues.
@giacomozecchini
#brightonSEO
If WRS can’t get or execute your
JS files correctly, your page may
be blank or broken.
@giacomozecchini
#brightonSEO
Eventually, WRS may need to
render again your page, which
means slower indexing.
@giacomozecchini
#brightonSEO
Debugging at scale
@giacomozecchini
#brightonSEO
Manually checking page per
page might work on very small
websites.
@giacomozecchini
#brightonSEO
When you start having a lot of
pages.. That’s a problem!
@giacomozecchini
#brightonSEO
You can prioritise and group
pages with similar HTML and
resources together, but..
@giacomozecchini
#brightonSEO
..the rendering of a page can fail
regardless of what happens to
other similar pages.
@giacomozecchini
#brightonSEO
You still have to manually check
pages to be 100% sure those are
correctly rendered.
@giacomozecchini
#brightonSEO
WRS capabilities
vs Debugging
@giacomozecchini
#brightonSEO
Understanding what a Web
Rendering Service can or can’t
do is a one time task.
@giacomozecchini
#brightonSEO
You can build a page with a
specific feature and test it. If it
works once it will work again on
other pages.
@giacomozecchini
#brightonSEO
When debugging issues you are
not focusing on a single feature
but on having an overall correct
rendering.
@giacomozecchini
#brightonSEO
View crawled page is the way.
@giacomozecchini
#brightonSEO
A lot of information.
@giacomozecchini
#brightonSEO
But that’s not enough, you want
more. For instance, Javascript
console messages are
coalesced and not shown.
@giacomozecchini
#brightonSEO
Yes, you can get JavaScript
console errors from the Mobile
Friendly test or other live tests
but it’s not the same!
@giacomozecchini
#brightonSEO
Mobile-Friendly Test and the
other live tests bypass the
cache, have shorter timeouts,
and few other differences.
@giacomozecchini
#brightonSEO
A new hope
approach
@giacomozecchini
#brightonSEO
I started my research by getting
and printing the information I
needed on the page with some
Javascript, in a hidden <DIV>.
@giacomozecchini
#brightonSEO
<html>
…
<div id="info" style="display:none"></div>
…
<script>
…
function getInformation(){
// do stuff!
}
…
var div = document.getElementById("info");
var p = document.createElement("p");
p.innerText = getInformation();
div.appendChild(p);
…
</script>
…
</html>
@giacomozecchini
#brightonSEO
This prints the
information you need
in the DIV at
rendering time and
then you can get
them in Search
Console view crawled
page HTML.
But waiting for a page to be
crawled, rendered and indexed
again is time consuming and not
scalable.
@giacomozecchini
#brightonSEO
It’s a nice way of discovering
new things but you still have to
manually check all pages.
@giacomozecchini
#brightonSEO
Then, I thought of using 1x1 px
images, appending errors or
information in the URL:
https://www.example.com/image.jpg
?u=page_url&e=error
@giacomozecchini
#brightonSEO
The idea was to look in the
server access log and find all
errors that occurred during the
rendering.
@giacomozecchini
#brightonSEO
But Google’s WRS doesn’t
download images during the
rendering of a page.
@giacomozecchini
#brightonSEO
But then..
@giacomozecchini
#brightonSEO
The answer was always in
front of my eyes:
Javascript + POST requests!
@giacomozecchini
#brightonSEO
Google’s WRS cache GET
requests.
@giacomozecchini
#brightonSEO
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
But doesn’t cache POST
requests.
@giacomozecchini
#brightonSEO
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
Say welcome to the shiny new
Search Engine Rendering
Errors Logging framework!
@giacomozecchini
#brightonSEO
@giacomozecchini
#brightonSEO
Crawler
WRS
Cache
SEARCH ENGINE YOUR WEBSITE
Search Engines download or use the cache of
the resources they need to render your pages.
* Icons made by Freepik from www.flaticon.com
@giacomozecchini
#brightonSEO
CHROMIUM INSTANCE
SEARCH ENGINE
Crawler
INTERNET
During the rendering the website, WRS executes
Javascript and downloads additional resources
a website might need or request.
* Icons made by Freepik from www.flaticon.com
@giacomozecchini
#brightonSEO
CHROMIUM INSTANCE
* Icons made by Freepik from www.flaticon.com
SEARCH ENGINE
Crawler
SERVER
What if one of those Javascript sends a non
cacheable POST request to an external server?!
POST
REQUEST
@giacomozecchini
#brightonSEO
There are multiple ways of
sending POST requests in JS:
Fetch API
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Navigator.sendBeacon()
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon
XMLHttpRequest.send()
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send
{
"page":"https://www.example.com",
"timestamp": 1592568000000,
"category": "Fetch",
"error": "https://www.example.com/style.css"
}
@giacomozecchini
#brightonSEO
The message (or beacon) contains the information you want to store
in your database.
@giacomozecchini
#brightonSEO
TIME URL CATEGORY ERROR
25/10/1985 09:00:00 https://www.example.com Fetch https://www.example.com/style.css
21/10/2015 07:28:00 https://www.example.com/about.html Fetch https://www.example.com/app.js
12/11/1955 06:38:00 https://www.example.com Javascript File: https://www.example.com/app.js Line: 3 Col: 2
Error: Uncaught ReferenceError: APP is not defined
When you have everything in a database you can query the tables
and do all your analysis. You can also have automatic alerts, etc.
Debugging in
practice
@giacomozecchini
#brightonSEO
!! Warning !!
Don’t use this code on your
website, these are just (bad)
examples.
@giacomozecchini
#brightonSEO
Debugging example #1
Check if a page has been
rendered
@giacomozecchini
#brightonSEO
<html>
…
<script>
sendMessageToServer();
</script>
…
</html>
@giacomozecchini
#brightonSEO
When the WRS executes the script, the
function sends a message back to the
server.
Debugging example #2
Know if there is a problem
downloading CSS or JS files
@giacomozecchini
#brightonSEO
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script>
…
window.addEventListener('error', function(err) {
if (isDownloadError(err)){
sendMessageToServer(err);
}
}, true);
…
</script>
…
</head>
…
</html>
@giacomozecchini
#brightonSEO
If there is an error and it's a CSS or
JS load error you can send a
message back to the server. This
works for HTTP/DNS/Network errors,
Robots.txt, fetch timeouts, etc.
Caveats
@giacomozecchini
#brightonSEO
There are some products out
there but all of them focus on
users and not on search
engines.
@giacomozecchini
#brightonSEO
Search engines are different
and you need to solve
different problems.
@giacomozecchini
#brightonSEO
You should be careful adding
new code to your website!
@giacomozecchini
#brightonSEO
Web Performance issues
You don’t want to slow down
the user experience with
something you need only for
search engines.
@giacomozecchini
#brightonSEO
Web Performance issues
Check for the User-Agent and
run the script only for search
engines.
@giacomozecchini
#brightonSEO
Crawl budget
You don’t want to consume
your crawl budget on these
requests.
@giacomozecchini
#brightonSEO
Crawl budget
Host your debugging server on
a different domain or
subdomain.
@giacomozecchini
#brightonSEO
There are many other possible
problems, you just need to find
a solution for them.
@giacomozecchini
#brightonSEO
Conclusions
@giacomozecchini
#brightonSEO
The simpler a page is, the
more chances it will render
correctly. The majority of
pages are just fine.
@giacomozecchini
#brightonSEO
If you work on big or complex
websites you may encounter
rendering problems.
@giacomozecchini
#brightonSEO
Debugging rendering
problems is a very time
consuming task..
@giacomozecchini
#brightonSEO
..but, if you use the right
approach you can cut down
the time it takes.
@giacomozecchini
#brightonSEO
You can use this approach as
a one time debugging script to
get more information or as a
monitoring system.
@giacomozecchini
#brightonSEO
Thank You!
Got questions? DM me on Twitter.
@giacomozecchini

Weitere ähnliche Inhalte

Was ist angesagt?

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 WebsitesManick Bhan
 
Crawl Budget: Everything you Need to Know
Crawl Budget: Everything you Need to KnowCrawl Budget: Everything you Need to Know
Crawl Budget: Everything you Need to KnowSallyR7
 
Cost Effective Multilingual Content Optimization in An International SEO Process
Cost Effective Multilingual Content Optimization in An International SEO ProcessCost Effective Multilingual Content Optimization in An International SEO Process
Cost Effective Multilingual Content Optimization in An International SEO ProcessAleyda Solís
 
Product, service and category page links (and how to get them) - Rebecca Moss...
Product, service and category page links (and how to get them) - Rebecca Moss...Product, service and category page links (and how to get them) - Rebecca Moss...
Product, service and category page links (and how to get them) - Rebecca Moss...Rebecca Moss
 
How To EAT Links.pptx
How To EAT Links.pptxHow To EAT Links.pptx
How To EAT Links.pptxDixon Jones
 
SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022
SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022 SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022
SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022 SophieBrannon
 
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 stuffMichael Van Den Reym
 
SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...
SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...
SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...Aleyda Solís
 
SEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing Reports
SEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing ReportsSEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing Reports
SEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing ReportsSimon Lesser
 
How to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble Romagnoli
How to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble RomagnoliHow to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble Romagnoli
How to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble RomagnoliRumble Romagnoli
 
How to leverage indexation tracking to monitor issues and improve performance
How to leverage indexation tracking to monitor issues and improve performanceHow to leverage indexation tracking to monitor issues and improve performance
How to leverage indexation tracking to monitor issues and improve performanceSimon Lesser
 
I Am A Donut - How To Avoid International SEO Mistakes
I Am A Donut - How To Avoid International SEO MistakesI Am A Donut - How To Avoid International SEO Mistakes
I Am A Donut - How To Avoid International SEO MistakesTom Brennan
 
How to put together a search strategy for a new category
How to put together a search strategy for a new categoryHow to put together a search strategy for a new category
How to put together a search strategy for a new categoryAmir Jirbandey
 
Networking for SEOs (and why it matters)
Networking for SEOs (and why it matters)Networking for SEOs (and why it matters)
Networking for SEOs (and why it matters)GretaKoivikko
 
A Simple method to Create Content using NLP
A Simple method to Create Content using NLP A Simple method to Create Content using NLP
A Simple method to Create Content using NLP Sante J. Achille
 
7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon
7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon
7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOConAleyda Solís
 
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 ReportingGreg Gifford
 
Core Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdf
Core Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdfCore Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdf
Core Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdfSophie Gibson
 
Hreflang tags: everything you need to know to start implementing them
Hreflang tags: everything you need to know to start implementing themHreflang tags: everything you need to know to start implementing them
Hreflang tags: everything you need to know to start implementing themSara Moccand-Sayegh
 
How to Use Search Intent to Dominate Google Discover
How to Use Search Intent to Dominate Google DiscoverHow to Use Search Intent to Dominate Google Discover
How to Use Search Intent to Dominate Google DiscoverFelipe Bazon
 

Was ist angesagt? (20)

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
 
Crawl Budget: Everything you Need to Know
Crawl Budget: Everything you Need to KnowCrawl Budget: Everything you Need to Know
Crawl Budget: Everything you Need to Know
 
Cost Effective Multilingual Content Optimization in An International SEO Process
Cost Effective Multilingual Content Optimization in An International SEO ProcessCost Effective Multilingual Content Optimization in An International SEO Process
Cost Effective Multilingual Content Optimization in An International SEO Process
 
Product, service and category page links (and how to get them) - Rebecca Moss...
Product, service and category page links (and how to get them) - Rebecca Moss...Product, service and category page links (and how to get them) - Rebecca Moss...
Product, service and category page links (and how to get them) - Rebecca Moss...
 
How To EAT Links.pptx
How To EAT Links.pptxHow To EAT Links.pptx
How To EAT Links.pptx
 
SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022
SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022 SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022
SEO Strategy: Where The F**K Do I Even Start? - Brighton SEO April 2022
 
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
 
SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...
SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...
SEO low hanging Fruit - Identifying High Impact Opportunities Fast #SEOforUkr...
 
SEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing Reports
SEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing ReportsSEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing Reports
SEO Reporting: Slay the Time-Sucking Monster and Deliver Amazing Reports
 
How to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble Romagnoli
How to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble RomagnoliHow to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble Romagnoli
How to Create an Airtight SEO Strategy to Beat Any Competitor - Rumble Romagnoli
 
How to leverage indexation tracking to monitor issues and improve performance
How to leverage indexation tracking to monitor issues and improve performanceHow to leverage indexation tracking to monitor issues and improve performance
How to leverage indexation tracking to monitor issues and improve performance
 
I Am A Donut - How To Avoid International SEO Mistakes
I Am A Donut - How To Avoid International SEO MistakesI Am A Donut - How To Avoid International SEO Mistakes
I Am A Donut - How To Avoid International SEO Mistakes
 
How to put together a search strategy for a new category
How to put together a search strategy for a new categoryHow to put together a search strategy for a new category
How to put together a search strategy for a new category
 
Networking for SEOs (and why it matters)
Networking for SEOs (and why it matters)Networking for SEOs (and why it matters)
Networking for SEOs (and why it matters)
 
A Simple method to Create Content using NLP
A Simple method to Create Content using NLP A Simple method to Create Content using NLP
A Simple method to Create Content using NLP
 
7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon
7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon
7 E-Commerce SEO Mistakes & How to Fix Them #DeepSEOCon
 
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
 
Core Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdf
Core Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdfCore Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdf
Core Web Vitals Audit - Sophie Gibson - PDF - BrightonSEO.pdf
 
Hreflang tags: everything you need to know to start implementing them
Hreflang tags: everything you need to know to start implementing themHreflang tags: everything you need to know to start implementing them
Hreflang tags: everything you need to know to start implementing them
 
How to Use Search Intent to Dominate Google Discover
How to Use Search Intent to Dominate Google DiscoverHow to Use Search Intent to Dominate Google Discover
How to Use Search Intent to Dominate Google Discover
 

Ähnlich wie Debugging rendering problems at scale

Validating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data IntegrityValidating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data IntegrityGiacomo Zecchini
 
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 Stoxpatrickstox
 
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?"Fwdays
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Onely
 
SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...
SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...
SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...Distilled
 
How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...
How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...
How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...Jamie Indigo
 
Javascript SEO Devs and SEOs playing nicely
Javascript SEO Devs and SEOs playing nicelyJavascript SEO Devs and SEOs playing nicely
Javascript SEO Devs and SEOs playing nicelyPeter Mead
 
Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017Christian Heilmann
 
Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018
Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018
Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018patrickstox
 
Web Performance & Search Engines - A look beyond rankings
Web Performance & Search Engines - A look beyond rankingsWeb Performance & Search Engines - A look beyond rankings
Web Performance & Search Engines - A look beyond rankingsGiacomo Zecchini
 
Prototyping user interactions in web apps
Prototyping user interactions in web appsPrototyping user interactions in web apps
Prototyping user interactions in web appsPatrick NDJIENTCHEU
 
Mobile First Responsive Design
Mobile First Responsive DesignMobile First Responsive Design
Mobile First Responsive DesignJason Grigsby
 
rendre AJAX crawlable par les moteurs
rendre AJAX crawlable par les moteursrendre AJAX crawlable par les moteurs
rendre AJAX crawlable par les moteursSerge Esteves
 
Challenges of building a search engine like web rendering service
Challenges of building a search engine like web rendering serviceChallenges of building a search engine like web rendering service
Challenges of building a search engine like web rendering serviceGiacomo Zecchini
 
Modern SEO Players Guide
Modern SEO Players GuideModern SEO Players Guide
Modern SEO Players GuideMichael King
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Nicholas Zakas
 
Technical SEO: Crawl Space Management - SEOZone Istanbul 2014
Technical SEO: Crawl Space Management - SEOZone Istanbul 2014Technical SEO: Crawl Space Management - SEOZone Istanbul 2014
Technical SEO: Crawl Space Management - SEOZone Istanbul 2014Bastian Grimm
 
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)Nicholas Zakas
 

Ähnlich wie Debugging rendering problems at scale (20)

Validating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data IntegrityValidating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data Integrity
 
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
 
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?"
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript
 
SMX_DevTools_Monaco_2.pdf
SMX_DevTools_Monaco_2.pdfSMX_DevTools_Monaco_2.pdf
SMX_DevTools_Monaco_2.pdf
 
SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...
SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...
SearchLove London 2017 | Emily Grossman | From Website to Web-App: Fantastic ...
 
How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...
How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...
How Googlebot Renders (Roleplaying as Google's Web Rendering Service-- D&D st...
 
Javascript SEO Devs and SEOs playing nicely
Javascript SEO Devs and SEOs playing nicelyJavascript SEO Devs and SEOs playing nicely
Javascript SEO Devs and SEOs playing nicely
 
Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017Leveling up your JavaScipt - DrupalJam 2017
Leveling up your JavaScipt - DrupalJam 2017
 
Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018
Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018
Troubleshooting SEO for JS Frameworks - Patrick Stox - DTD 2018
 
Web Performance & Search Engines - A look beyond rankings
Web Performance & Search Engines - A look beyond rankingsWeb Performance & Search Engines - A look beyond rankings
Web Performance & Search Engines - A look beyond rankings
 
Prototyping user interactions in web apps
Prototyping user interactions in web appsPrototyping user interactions in web apps
Prototyping user interactions in web apps
 
Mobile First Responsive Design
Mobile First Responsive DesignMobile First Responsive Design
Mobile First Responsive Design
 
rendre AJAX crawlable par les moteurs
rendre AJAX crawlable par les moteursrendre AJAX crawlable par les moteurs
rendre AJAX crawlable par les moteurs
 
Challenges of building a search engine like web rendering service
Challenges of building a search engine like web rendering serviceChallenges of building a search engine like web rendering service
Challenges of building a search engine like web rendering service
 
HTML5 Intro
HTML5 IntroHTML5 Intro
HTML5 Intro
 
Modern SEO Players Guide
Modern SEO Players GuideModern SEO Players Guide
Modern SEO Players Guide
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)
 
Technical SEO: Crawl Space Management - SEOZone Istanbul 2014
Technical SEO: Crawl Space Management - SEOZone Istanbul 2014Technical SEO: Crawl Space Management - SEOZone Istanbul 2014
Technical SEO: Crawl Space Management - SEOZone Istanbul 2014
 
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
Progressive Enhancement 2.0 (jQuery Conference SF Bay Area 2011)
 

Kürzlich hochgeladen

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 

Kürzlich hochgeladen (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Debugging rendering problems at scale

  • 1. Debugging rendering problems at scale Giacomo Zecchini | Verve Search SLIDESHARE.NET/GIACOMOZECCHINI @GIACOMOZECCHINI
  • 2. Hi, I’m Giacomo. Technical Director at Verve Search. Technical background and previous experiences in development. @giacomozecchini #brightonSEO
  • 3. Today we are going to talk about rendering errors, the challenges of debugging at scale and a new approach to solve these issues. @giacomozecchini #brightonSEO
  • 4. The search engine's rendering process is very similar to Schrödinger's cat paradox. https://en.wikipedia.org/wiki/Schrödinger's_cat @giacomozecchini #brightonSEO
  • 5. A hypothetical cat page may be considered simultaneously both alive correctly rendered and dead not correctly rendered. @giacomozecchini #brightonSEO
  • 7. Search engines get web pages and put them in web rendering services. https://developers.google.com/search/docs/guides/javascript-seo-basics @giacomozecchini #brightonSEO
  • 8. Inside the web rendering services, the pages are rendered similarly to a browser. https://developers.google.com/search/docs/guides/javascript-seo-basics @giacomozecchini #brightonSEO
  • 9. Then, the search engines can extract all information they need from those rendered pages. https://developers.google.com/search/docs/guides/javascript-seo-basics @giacomozecchini #brightonSEO
  • 10. This is an oversimplification of a complex process. https://www.youtube.com/watch?v=Qxd_d9m9vzo @giacomozecchini #brightonSEO
  • 11. If you want to know more about this I’d suggest to watch Martin Splitt’s TechSEO Boost 2019 talk. https://www.youtube.com/watch?v=Qxd_d9m9vzo @giacomozecchini #brightonSEO
  • 12. What’s the problem with Web Rendering Services? @giacomozecchini #brightonSEO
  • 13. What happens inside the web rendering services is something hidden from our eyes, like in a closed box. @giacomozecchini #brightonSEO
  • 14. You don’t know if a page has been correctly rendered until you check it manually. @giacomozecchini #brightonSEO
  • 15. Search engines are capable of rendering your pages and most of the time the process will be fine. @giacomozecchini #brightonSEO
  • 16. Nonetheless, some pages have rendering problems. @giacomozecchini #brightonSEO
  • 17. When is a page not correctly rendered? @giacomozecchini #brightonSEO
  • 18. A page is “not correctly rendered” when is not possible for the WRS to get an asset or when an error blocks the process. @giacomozecchini #brightonSEO
  • 19. Not only pages with Javascript have problems! @giacomozecchini #brightonSEO
  • 20. Let's have a look at a few examples... @giacomozecchini #brightonSEO
  • 21. HTTP / DNS / Network errors @giacomozecchini #brightonSEO https://developers.google.com/search/docs/advanced/crawling/http-network-errors Crawler WRS Cache SEARCH ENGINE * Icons made by Freepik from www.flaticon.com
  • 22. Robots.txt blocks a resources @giacomozecchini #brightonSEO https://developers.google.com/search/docs/advanced/robots/intro Crawler WRS Cache SEARCH ENGINE * Icons made by Freepik from www.flaticon.com
  • 23. Fetch timeout @giacomozecchini #brightonSEO Crawler WRS Cache SEARCH ENGINE * this doesn’t seem very common, but it can happen * Icons made by Freepik from www.flaticon.com
  • 24. https/http mixed content @giacomozecchini #brightonSEO If your website has an HTTPS URL but one of the Javascript files has an HTTP URL and the HTTPS version is not available, the script won't be used!
  • 25. Cache mismatch, user permission for specific features (e.g. geolocation), service worker registration, Javascript syntax errors, etc. @giacomozecchini #brightonSEO
  • 26. What if a page is not correctly rendered? @giacomozecchini #brightonSEO
  • 27. If WRS can’t get your CSS the page layout won’t be correct and you may also have Mobile Usability issues. @giacomozecchini #brightonSEO
  • 28. If WRS can’t get or execute your JS files correctly, your page may be blank or broken. @giacomozecchini #brightonSEO
  • 29. Eventually, WRS may need to render again your page, which means slower indexing. @giacomozecchini #brightonSEO
  • 31. Manually checking page per page might work on very small websites. @giacomozecchini #brightonSEO
  • 32. When you start having a lot of pages.. That’s a problem! @giacomozecchini #brightonSEO
  • 33. You can prioritise and group pages with similar HTML and resources together, but.. @giacomozecchini #brightonSEO
  • 34. ..the rendering of a page can fail regardless of what happens to other similar pages. @giacomozecchini #brightonSEO
  • 35. You still have to manually check pages to be 100% sure those are correctly rendered. @giacomozecchini #brightonSEO
  • 37. Understanding what a Web Rendering Service can or can’t do is a one time task. @giacomozecchini #brightonSEO
  • 38. You can build a page with a specific feature and test it. If it works once it will work again on other pages. @giacomozecchini #brightonSEO
  • 39. When debugging issues you are not focusing on a single feature but on having an overall correct rendering. @giacomozecchini #brightonSEO
  • 40. View crawled page is the way. @giacomozecchini #brightonSEO
  • 41. A lot of information. @giacomozecchini #brightonSEO
  • 42. But that’s not enough, you want more. For instance, Javascript console messages are coalesced and not shown. @giacomozecchini #brightonSEO
  • 43. Yes, you can get JavaScript console errors from the Mobile Friendly test or other live tests but it’s not the same! @giacomozecchini #brightonSEO
  • 44. Mobile-Friendly Test and the other live tests bypass the cache, have shorter timeouts, and few other differences. @giacomozecchini #brightonSEO
  • 46. I started my research by getting and printing the information I needed on the page with some Javascript, in a hidden <DIV>. @giacomozecchini #brightonSEO
  • 47. <html> … <div id="info" style="display:none"></div> … <script> … function getInformation(){ // do stuff! } … var div = document.getElementById("info"); var p = document.createElement("p"); p.innerText = getInformation(); div.appendChild(p); … </script> … </html> @giacomozecchini #brightonSEO This prints the information you need in the DIV at rendering time and then you can get them in Search Console view crawled page HTML.
  • 48. But waiting for a page to be crawled, rendered and indexed again is time consuming and not scalable. @giacomozecchini #brightonSEO
  • 49. It’s a nice way of discovering new things but you still have to manually check all pages. @giacomozecchini #brightonSEO
  • 50. Then, I thought of using 1x1 px images, appending errors or information in the URL: https://www.example.com/image.jpg ?u=page_url&e=error @giacomozecchini #brightonSEO
  • 51. The idea was to look in the server access log and find all errors that occurred during the rendering. @giacomozecchini #brightonSEO
  • 52. But Google’s WRS doesn’t download images during the rendering of a page. @giacomozecchini #brightonSEO
  • 54. The answer was always in front of my eyes: Javascript + POST requests! @giacomozecchini #brightonSEO
  • 55. Google’s WRS cache GET requests. @giacomozecchini #brightonSEO https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
  • 56. But doesn’t cache POST requests. @giacomozecchini #brightonSEO https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
  • 57. Say welcome to the shiny new Search Engine Rendering Errors Logging framework! @giacomozecchini #brightonSEO
  • 58. @giacomozecchini #brightonSEO Crawler WRS Cache SEARCH ENGINE YOUR WEBSITE Search Engines download or use the cache of the resources they need to render your pages. * Icons made by Freepik from www.flaticon.com
  • 59. @giacomozecchini #brightonSEO CHROMIUM INSTANCE SEARCH ENGINE Crawler INTERNET During the rendering the website, WRS executes Javascript and downloads additional resources a website might need or request. * Icons made by Freepik from www.flaticon.com
  • 60. @giacomozecchini #brightonSEO CHROMIUM INSTANCE * Icons made by Freepik from www.flaticon.com SEARCH ENGINE Crawler SERVER What if one of those Javascript sends a non cacheable POST request to an external server?! POST REQUEST
  • 61. @giacomozecchini #brightonSEO There are multiple ways of sending POST requests in JS: Fetch API https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch Navigator.sendBeacon() https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon XMLHttpRequest.send() https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send
  • 62. { "page":"https://www.example.com", "timestamp": 1592568000000, "category": "Fetch", "error": "https://www.example.com/style.css" } @giacomozecchini #brightonSEO The message (or beacon) contains the information you want to store in your database.
  • 63. @giacomozecchini #brightonSEO TIME URL CATEGORY ERROR 25/10/1985 09:00:00 https://www.example.com Fetch https://www.example.com/style.css 21/10/2015 07:28:00 https://www.example.com/about.html Fetch https://www.example.com/app.js 12/11/1955 06:38:00 https://www.example.com Javascript File: https://www.example.com/app.js Line: 3 Col: 2 Error: Uncaught ReferenceError: APP is not defined When you have everything in a database you can query the tables and do all your analysis. You can also have automatic alerts, etc.
  • 65. !! Warning !! Don’t use this code on your website, these are just (bad) examples. @giacomozecchini #brightonSEO
  • 66. Debugging example #1 Check if a page has been rendered @giacomozecchini #brightonSEO
  • 67. <html> … <script> sendMessageToServer(); </script> … </html> @giacomozecchini #brightonSEO When the WRS executes the script, the function sends a message back to the server.
  • 68. Debugging example #2 Know if there is a problem downloading CSS or JS files @giacomozecchini #brightonSEO
  • 69. <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script> … window.addEventListener('error', function(err) { if (isDownloadError(err)){ sendMessageToServer(err); } }, true); … </script> … </head> … </html> @giacomozecchini #brightonSEO If there is an error and it's a CSS or JS load error you can send a message back to the server. This works for HTTP/DNS/Network errors, Robots.txt, fetch timeouts, etc.
  • 71. There are some products out there but all of them focus on users and not on search engines. @giacomozecchini #brightonSEO
  • 72. Search engines are different and you need to solve different problems. @giacomozecchini #brightonSEO
  • 73. You should be careful adding new code to your website! @giacomozecchini #brightonSEO
  • 74. Web Performance issues You don’t want to slow down the user experience with something you need only for search engines. @giacomozecchini #brightonSEO
  • 75. Web Performance issues Check for the User-Agent and run the script only for search engines. @giacomozecchini #brightonSEO
  • 76. Crawl budget You don’t want to consume your crawl budget on these requests. @giacomozecchini #brightonSEO
  • 77. Crawl budget Host your debugging server on a different domain or subdomain. @giacomozecchini #brightonSEO
  • 78. There are many other possible problems, you just need to find a solution for them. @giacomozecchini #brightonSEO
  • 80. The simpler a page is, the more chances it will render correctly. The majority of pages are just fine. @giacomozecchini #brightonSEO
  • 81. If you work on big or complex websites you may encounter rendering problems. @giacomozecchini #brightonSEO
  • 82. Debugging rendering problems is a very time consuming task.. @giacomozecchini #brightonSEO
  • 83. ..but, if you use the right approach you can cut down the time it takes. @giacomozecchini #brightonSEO
  • 84. You can use this approach as a one time debugging script to get more information or as a monitoring system. @giacomozecchini #brightonSEO
  • 85. Thank You! Got questions? DM me on Twitter. @giacomozecchini