Did you realize that whereas Marketing Media Wizard weblog is powered by WordPress, a lot of the remainder of the location is powered by JavaScript like React?

Most web sites use some type of JavaScript so as to add interactivity and to enhance person expertise. Some use it for menus, pulling in merchandise or costs, grabbing content material from a number of sources, or in some circumstances, for all the things on the location. The actuality of the present internet is that JavaScript is ubiquitous.

As Google’s John Mueller mentioned:

I’m not saying that SEOs have to exit and discover ways to program JavaScript. It’s fairly the other. SEOs principally have to understand how Google handles JavaScript and the best way to troubleshoot points. In only a few circumstances will an search engine marketing even be allowed to the touch the code. My aim with this publish is that will help you be taught:

JavaScript search engine marketing is part of Technical search engine marketing (Search Engine Optimization) that seeks to make JavaScript-heavy web sites simple to crawl and index, in addition to search-friendly. The aim is to have these web sites be discovered and rank increased in search engines.

Is JavaScript unhealthy for search engine marketing; is JavaScript evil? Not in any respect. It’s simply completely different from what many SEOs are used to, and there’s a little bit of a studying curve. People do are inclined to overuse it for issues the place there’s most likely a greater answer, however it’s important to work with what you may have at occasions. Just know that Javascript isn’t excellent and it isn’t at all times the appropriate instrument for the job. It can’t be parsed progressively, not like HTML and CSS, and it may be heavy on page load and efficiency. In many circumstances, you could be buying and selling efficiency for performance.

How Google processes pages with JavaScript

In the early days of search engines, a downloaded HTML response was sufficient to see the content material of most pages. Thanks to the rise of JavaScript, search engines now have to render many pages as a browser would to allow them to see content material how a person sees it.

The system that handles the rendering course of at Google is named the Web Rendering Service (WRS). Google has offered a simplistic diagram to cowl how this course of works.

Let’s say we begin the method at URL.

1. Crawler

The crawler sends GET requests to the server. The server responds with headers and the contents of the file, which then will get saved.

The request is more likely to come from a cellular user-agent since Google is totally on mobile-first indexing now. You can verify to see how Google is crawling your web site with the URL Inspection Tool inside Search Console. When you run this for a URL, verify the Coverage info for “Crawled as,” and it ought to let you know whether or not you’re nonetheless on desktop indexing or mobile-first indexing.

svg%3E - JavaScript search engine marketing: What You Need To Know

The requests principally come from Mountain View, CA, USA, however additionally they do some crawling for locale-adaptive pages outdoors of the United States. I point out this as a result of some websites will block or deal with guests from a particular nation or utilizing a specific IP in numerous methods, which may trigger your content material to not be seen by Googlebot.

Some websites can also use user-agent detection to point out content material to a particular crawler. Especially with JavaScript websites, Google could also be seeing one thing completely different than a person. This is why Google instruments such because the URL Inspection Tool inside Google Search Console, the Mobile-Friendly Test, and the Rich Results Test are vital for troubleshooting JavaScript search engine marketing points. They present you what Google sees and are helpful for checking if Google could also be blocked and if they’ll see the content material on the page. I’ll cowl the best way to take a look at this within the part concerning the Renderer as a result of there are some key variations between the downloaded GET request, the rendered page, and even the testing instruments.

It’s additionally vital to notice that whereas Google states the output of the crawling course of as “HTML” on the picture above, in actuality, they’re crawling and storing all assets wanted to construct the page. HTML pages, Javascript information, CSS, XHR requests, API endpoints, and extra.

2. Processing

There are quite a lot of techniques obfuscated by the time period “Processing” within the picture. I’m going to cowl a couple of of those which can be related to JavaScript.

Resources and Links

Google doesn’t navigate from page to page as a person would. Part of Processing is to verify the page for hyperlinks to different pages and information wanted to construct the page. These hyperlinks are pulled out and added to the crawl queue, which is what Google is utilizing to prioritize and schedule crawling.

Google will pull useful resource hyperlinks (CSS, JS, and so on.) wanted to construct a page from issues like <hyperlink> tags. However, hyperlinks to different pages should be in a particular format for Google to deal with them as hyperlinks. Internal and exterior hyperlinks should be an <a> tag with an href attribute. There are some ways you may make this work for customers with JavaScript that aren’t search-friendly.


<a href=”/page”>easy is sweet</a>
<a href=”/page” onclick=”goTo(‘page’)”>nonetheless okay</a>


<a onclick=”goTo(‘page’)”>nope, no href</a>
<a href=”javascript:goTo(‘page’)”>nope, lacking hyperlink</a>
<a href=”javascript:void(0)”>nope, lacking hyperlink</a>
<span onclick=”goTo(‘page’)”>not the appropriate HTML component</span>
<possibility worth="page">nope, incorrect HTML component</possibility>
<a href=”#”>no hyperlink</a>
Button, ng-click, there are numerous extra methods this may be accomplished incorrectly.

It’s additionally price noting that inside hyperlinks added with JavaScript won’t get picked up till after rendering. That must be comparatively fast and never a trigger for concern typically.


Every file that Google downloads, together with HTML pages, JavaScript information, CSS information, and so on., goes to be aggressively cached. Google will ignore your cache timings and fetch a brand new copy once they need to. I’ll speak a bit extra about this and why it’s vital within the Renderer part.

Duplicate elimination

Duplicate content material could also be eradicated or deprioritized from the downloaded HTML earlier than it will get despatched to rendering. With app shell fashions, little or no content material and code could also be proven within the HTML response. In reality, each page on the location could show the identical code, and this might be the identical code proven on a number of web sites. This can typically trigger pages to be handled as duplicates and never instantly go to rendering. Even worse, the incorrect page and even the incorrect web site could present in search outcomes. This ought to resolve itself over time however might be problematic, particularly with newer web sites.

Most Restrictive Directives

Google will select essentially the most restrictive statements between HTML and the rendered model of a page. If JavaScript adjustments a press release and that conflicts with the assertion from HTML, Google will merely obey whichever is essentially the most restrictive. Noindex will override index, and noindex in HTML will skip rendering altogether.

3. Render queue

Every page goes to the renderer now. One of the largest issues from many SEOs with JavaScript and two-stage indexing (HTML then rendered page) is that pages may not get rendered for days and even weeks. When Google seemed into this, they discovered pages went to the renderer at a median time of 5 seconds, and the 90th percentile was minutes. So the period of time between getting the HTML and rendering the pages shouldn’t be a priority typically.

4. Renderer

The renderer is the place Google renders a page to see what a person sees. This is the place they’re going to course of the JavaScript and any adjustments made by JavaScript to the Document Object Model (DOM).

svg%3E - JavaScript search engine marketing: What You Need To Know

For this, Google is utilizing a headless Chrome browser that’s now “evergreen,” which suggests it ought to use the newest Chrome model and help the newest options. Until not too long ago, Google was rendering with Chrome 41, so many options weren’t supported.

Google has extra info on the Web Rendering Service (WRS), which incorporates issues like denying permissions, being stateless, flattening mild DOM and shadow DOM, and extra that’s price studying.

Rendering at web-scale could be the eighth surprise of the world. It’s a critical endeavor and takes an amazing quantity of assets. Because of the size, Google is taking many shortcuts with the rendering course of to hurry issues up. At Marketing Media Wizard, we’re the one main search engine marketing instrument that renders internet pages at scale, and we handle to render ~150M pages a day to make our hyperlink index extra full. It permits us to verify for JavaScript redirects and we will additionally present hyperlinks we discovered inserted with JavaScript which we present with a JS tag within the hyperlink stories:

svg%3E - JavaScript search engine marketing: What You Need To Know

Cached Resources

Google is relying closely on caching assets. Pages are cached; information are cached; API requests are cached; mainly, all the things is cached earlier than being despatched to the renderer. They’re not going out and downloading every useful resource for each page load, however as a substitute utilizing cached assets to hurry up this course of.

This can result in some not possible states the place earlier file variations are used within the rendering course of and the listed model of a page could include components of older information. You can use file versioning or content material fingerprinting to generate new file names when vital adjustments are made in order that Google has to obtain the up to date model of the useful resource for rendering.

No Fixed Timeout

A typical search engine marketing fantasy is that the renderer solely waits 5 seconds to load your page. While it’s at all times a good suggestion to make your web site sooner, this fantasy doesn’t actually make sense with the way in which Google caches information talked about above. They’re mainly loading a page with all the things cached already. The fantasy comes from the testing instruments just like the URL Inspection Tool the place assets are fetched stay and they should set an affordable restrict.

There isn’t any mounted timeout for the renderer. What they’re probably doing is one thing much like what the general public Rendertron does. They probably watch for one thing like networkidle0 the place no extra community exercise is going on and likewise set a most period of time in case one thing will get caught or somebody is attempting to mine bitcoin on their pages.

What Googlebot Sees

Googlebot doesn’t take motion on webpages. They’re not going to click on issues or scroll, however that doesn’t imply they don’t have workarounds. For content material, so long as it’s loaded within the DOM with no wanted motion, they may see it. I’ll cowl this extra within the troubleshooting part however mainly, if the content material is within the DOM however simply hidden, it is going to be seen. If it’s not loaded into the DOM till after a click on, then the content material received’t be discovered.

Google doesn’t have to scroll to see your content material both as a result of they’ve a intelligent workaround to see the content material. For cellular, they load the page with a display measurement of 411×731 pixels and resize the length to 12,140 pixels. Essentially, it turns into a very lengthy cellphone with a display measurement of 411×12140 pixels. For desktop, they do the identical and go from 1024×768 pixels to 1024×9307 pixels.

svg%3E - JavaScript search engine marketing: What You Need To Know

Another fascinating shortcut is that Google doesn’t paint the pixels in the course of the rendering course of. It takes time and extra assets to complete a page load, they usually don’t really want to see the ultimate state with the pixels painted. They simply have to know the construction and the format they usually get that with out having to truly paint the pixels. As Martin Splitt from Google places it:


In Google search we don’t actually care concerning the pixels as a result of we don’t actually need to present it to somebody. We need to course of the data and the semantic info so we’d like one thing within the intermediate state. We don’t have to truly paint the pixels.

A visible may assist clarify what’s minimize out a bit higher. In Chrome Dev Tools, if you happen to run a take a look at on the Performance tab you get a loading chart. The stable inexperienced half right here represents the portray stage and for Googlebot that by no means occurs so that they save assets.

svg%3E - JavaScript search engine marketing: What You Need To Know

Gray = downloads
Blue = HTML
Yellow = JavaScript
Purple = Layout
Green = Painting

5. Crawl queue

Google has a useful resource that talks a bit about crawl budget, however you need to know that every web site has its personal crawl finances, and every request needs to be prioritized. Google additionally has to steadiness your web site crawling vs. each different web site on the internet. Newer websites generally or websites with quite a lot of dynamic pages will probably be crawled slower. Some pages shall be up to date much less typically than others, and a few assets can also be requested much less incessantly.

Testing / troubleshooting

One ‘gotcha’ with JavaScript websites is they’ll replace solely components of the DOM. Browsing to a different page as a person could not replace some facets like title tags or canonical tags within the DOM, however this might not be a problem for search engines. Remember, Google masses every page stateless, so that they’re not saving earlier info and aren’t navigating between pages. I’ve seen SEOs get tripped up pondering there’s a downside due to what they see after navigating from one page to a different, similar to a canonical tag that doesn’t replace, however Google could by no means see this state. Devs can repair this by updating the state utilizing what’s referred to as the History API, however once more it might not be an issue. Refresh the page and see what you see or higher but run it via certainly one of Google’s testing instruments to see what they see. More on these in a second.

View-source vs. Inspect

When you right-click in a browser window, you’ll see a few choices for viewing the supply code of the page and for inspecting the page. View-source goes to point out you an identical as a GET request would. This is the uncooked HTML of the page. Inspect reveals you the processed DOM after adjustments have been made and is nearer to the content material that Googlebot sees. It’s mainly the up to date and newest model of the page. You ought to use examine over view-source when working with JavaScript.

svg%3E - JavaScript search engine marketing: What You Need To Know

Google Cache

Google’s cache will not be a dependable approach to verify what Googlebot sees. It’s often the preliminary HTML, though it’s typically the rendered HTML or an older model. The system was made to see the content material when an internet site is down. It’s not notably helpful as a debug instrument.

Google Testing Tools

Google’s testing instruments just like the URL Inspector inside Google Search Console, Mobile Friendly Tester, Rich Results Tester are helpful for debugging. Still, even these instruments are barely completely different from what Google will see. I already talked concerning the five-second timeout in these instruments that the renderer doesn’t have, however these instruments additionally differ in that they’re pulling assets in real-time and never utilizing the cached variations because the renderer would. The screenshots in these instruments additionally present pages with the pixels painted, which Google doesn’t see within the renderer.

The instruments are helpful to see if content material is DOM-loaded, although. The HTML proven in these instruments is the rendered DOM. You can search for a snippet of textual content to see if it was loaded in by default.

svg%3E - JavaScript search engine marketing: What You Need To Know

The instruments will even present you assets which may be blocked and console error messages that are helpful for debugging.

Searching Text in Google

Another fast verify you are able to do is solely search for a snippet of your content material in Google. Search for “some phrase from your content” and see if the page is returned. If it’s, then your content material was probably seen. Note that content material that’s hidden by default might not be surfaced inside your snippet on the SERPs.

Marketing Media Wizard

Along with the hyperlink index rendering pages, you possibly can allow JavaScript in Site Audit crawls to unlock extra knowledge in your audits.

svg%3E - JavaScript search engine marketing: What You Need To Know

The Marketing Media Wizard Toolbar additionally helps JavaScript and lets you evaluate HTML to rendered variations of tags.

svg%3E - JavaScript search engine marketing: What You Need To Know

There are numerous choices with regards to rendering JavaScript. Google has a stable chart that I’m simply going to point out. Any type of SSR, static rendering, prerendering setup goes to be nice for search engines. The major one which causes issues is full client-side rendering the place all the rendering occurs within the browser.

While Google would most likely be okay even with client-side rendering, it’s greatest to decide on a distinct rendering choice to help different search engines. Bing additionally has support for JavaScript rendering, however the scale is unknown. Yandex and Baidu have restricted help from what I’ve seen, and lots of different search engines have little to no help for JavaScript.

There’s additionally the choice of Dynamic Rendering, which is rendering for sure user-agents. This is mainly a workaround however might be helpful to render for sure bots like search engines and even social media bots. Social media bots don’t run JavaScript, so issues like OG tags received’t be seen except you render the content material earlier than serving it to them.

If you had been utilizing the outdated AJAX crawling scheme, notice that this has been deprecated and will not be supported.

Making your JavaScript web site search engine marketing pleasant

Numerous the processes are much like issues SEOs are already used to seeing, however there may be slight variations.

On-page search engine marketing

All the conventional on-page search engine marketing guidelines for content material, title tags, meta descriptions, alt attributes, meta robotic tags, and so on. nonetheless apply. See On-Page search engine marketing: An Actionable Guide.

A few points I repeatedly see when working with JavaScript web sites are that titles and descriptions could also be reused and that alt attributes on photographs are hardly ever set.

Allow crawling

Don’t block entry to assets. Google wants to have the ability to entry and obtain assets in order that they’ll render the pages correctly. In your robots.txt, the best approach to permit the wanted assets to be crawled is so as to add:

User-Agent: Googlebot
Allow: .js
Allow: .css


Change URLs when updating content material. I already talked about the History API, however you need to know that with JavaScript frameworks, they’re going to have a router that allows you to map to wash URLs. You don’t need to use hashes (#) for routing. This is very an issue for Vue and among the earlier variations of Angular. So for a URL like abc.com/#one thing, something after a # is often ignored by a server. To repair this for Vue, you possibly can work together with your developer to alter the next:

Vue router: 
Use ‘History’ Mode as a substitute of the normal ‘Hash’ Mode.

const router = new VueRouter ({
mode: ‘history’,
router: [] //the array of router hyperlinks

Duplicate content material

With JavaScript, there could also be a number of URLs for a similar content material, which ends up in duplicate content material points. This could also be brought on by capitalization, IDs, parameters with IDs, and so on. So, all of those could exist:


The answer is easy. Choose one model you need listed and set canonical tags.

search engine marketing “plugin” kind choices

For JavaScript frameworks, these are often known as modules. You’ll discover variations for most of the well-liked frameworks like React, Vue, and Angular by looking for the framework + module title like “React Helmet.” Meta tags, Helmet, and Head are all well-liked modules with comparable performance permitting you to set most of the well-liked tags wanted for search engine marketing.

Error pages

Because JavaScript frameworks aren’t server-side, they’ll’t actually throw a server error like a 404. You have a few completely different choices for error pages:

  1. Use a JavaScript redirect to a page that does reply with a 404 standing code
  2. Add a noindex tag to the page that’s failing together with some type of error message like “404 Page Not Found”. This shall be handled as a delicate 404 for the reason that precise standing code returned shall be a 200 okay.


JavaScript frameworks sometimes have routers that map to wash URLs. These routers often have an extra module that may additionally create sitemaps. You can discover them by looking for your system + router sitemap, similar to “Vue router sitemap.” Many of the rendering options can also have sitemap choices. Again, simply discover the system you utilize and Google the system + sitemap similar to “Gatsby sitemap” and also you’re certain to discover a answer that already exists.


SEOs are used to 301/302 redirects , that are server-side. But Javascript is often run client-side. This is okay since Google processes the page as follows the redirect. The redirects nonetheless move all indicators like PageRank. You can often discover these redirects within the code by on the lookout for “window.location.href”.


There are often a couple of module choices for various frameworks that help some options wanted for internationalization like hreflang. They’ve generally been ported to the completely different techniques and embrace i18n, intl, or many occasions the identical modules used for header tags like Helmet can be utilized so as to add wanted tags.

Lazy loading

There are often modules for dealing with lazy loading. If you haven’t seen but, there are modules to deal with just about all the things you might want to do when working with JavaScript frameworks. Lazy and Suspense are the preferred modules for lazy loading. You’ll need to lazy load photographs, however watch out to not lazy load content material. This might be accomplished with JavaScript, but it surely may imply that it’s not picked up appropriately by search engines.

Final ideas

JavaScript is a instrument for use properly, not one thing for SEOs to concern. Hopefully, this text has helped you perceive the best way to work with it higher, however don’t be afraid to achieve out to your builders and work with them and ask them questions. They are going to be your biggest allies in serving to to enhance your JavaScript web site for search engines.

Have questions? Let me know on Twitter.