{"id":52116,"date":"2018-07-23T08:00:11","date_gmt":"2018-07-23T06:00:11","guid":{"rendered":"https:\/\/www.humanlevel.com\/sin-categorizar\/como-afecta-javascript-y-ajax-a-la-indexacion-en-google.html"},"modified":"2023-10-11T10:26:40","modified_gmt":"2023-10-11T08:26:40","slug":"how-does-javascript-and-ajax-affect-google-indexing","status":"publish","type":"post","link":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing","title":{"rendered":"How does JavaScript and AJAX affect Google indexing?"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Index<\/p><ul class=\"toc_list\"><li><a href=\"#CSR_problems_on_initial_loading_of_a_page\">CSR problems on initial loading of a page<\/a><ul><li><a href=\"#Problems_due_to_slow_painting_time\">Problems due to slow painting time<\/a><\/li><li><a href=\"#Indexing_problems\">Indexing problems:<\/a><\/li><\/ul><\/li><li><a href=\"#CSR_problems_navigating_to_the_next_page\">CSR problems navigating to the next page<\/a><ul><li><a href=\"#Indexing_problems-2\">Indexing problems<\/a><\/li><li><a href=\"#What_happens_to_snippets_now_that_Google_can_index_AJAX\">What happens to snippets now that Google can index AJAX?<\/a><\/li><\/ul><\/li><li><a href=\"#Blocking_indexing_of_partial_responses_by_AJAX\">Blocking indexing of partial responses by AJAX<\/a><\/li><li><a href=\"#Conclusion\">Conclusion<\/a><\/li><\/ul><\/div>\n<p>Over time Google has greatly improved <strong>JavaScript and <a href=\"https:\/\/www.humanlevel.com\/en\/digital-marketing-dictionary\/ajax\" target=\"_blank\" rel=\"noopener noreferrer\">AJAX<\/a> indexing<\/strong>. At first it did not index anything or follow the links that appeared in the content loaded in this way, but then it started indexing some implementations and gradually improved. <strong>It is currently capable of indexing many different implementations<\/strong> and following links that appear in content loaded by <strong>AJAX or the Fetch API<\/strong>, but nevertheless, <strong>there will always be cases where it may fail<\/strong>.<\/p>\n<figure id=\"attachment_32291\" aria-describedby=\"caption-attachment-32291\" style=\"width: 200px\" class=\"wp-caption alignright\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-32291 size-full\" src=\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/spiderdrawing.gif\" alt=\"spider\" width=\"200\" height=\"144\" \/><figcaption id=\"caption-attachment-32291\" class=\"wp-caption-text\">If we use a universal framework or SSR the spider will be happy.<\/figcaption><\/figure>\n<p>In order to analyze the cases in which Google may not index our website, we must first be clear about the concept of <strong>Client Side Rendering<\/strong> (CSR). This involves the <strong>HTML being painted on the client with JavaScript<\/strong>, usually making excessive use of <strong>AJAX<\/strong>. Originally, websites always painted HTML on the server<strong>(Server Side Rendering<\/strong> or SSR), but for some time now, <strong>CSR has become popular with the emergence of JavaScript frameworks such as Angular, React and Vue<\/strong>. <strong>The CSR, however, has a negative impact on indexing, on the performance of the website and, consequently, on the positioning<\/strong>.<\/p>\n<p>As already explained in a previous post, for <strong>ensure indexing in all spiders and situations<\/strong>and also have a good performance, <strong>the best solution is to use a <a title=\"Go to indexability in Angular and React with Universal JavaScript\" href=\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/indexability-shadow-dom\" target=\"_blank\" rel=\"noopener noreferrer\">universal framework<\/a><\/strong>. This approach employs what some people call hybrid painting (<strong>Hybrid Rendering<\/strong>), painting <strong>on the server on the first load<\/strong> y <strong>on the client with JavaScript and AJAX in the navigation to the following links. <\/strong>In reality, however, there are other situations in which the term Hybrid Rendering could also be used.<\/p>\n<p>Sometimes it happens that the development company uses CSR and does not offer us the option of using a universal framework. In these <strong>CSR developments we will encounter problems<\/strong> that will be greater or lesser <strong>depending on the spider and its positioning algorithms<\/strong>. In this post, we are going to analyze <strong>what are those problems with the Google spider and how to fix them<\/strong>.<\/p>\n<h2><span id=\"CSR_problems_on_initial_loading_of_a_page\">CSR problems on initial loading of a page<\/span><\/h2>\n<p>First we are going to analyze the indexing problems that occur <strong>as soon as a URL is entered from outside the web<\/strong> and when the HTML is painted on the client with JavaScript.<\/p>\n<h3><span id=\"Problems_due_to_slow_painting_time\">Problems due to slow painting time<\/span><\/h3>\n<p>Google performs indexing as follows:<\/p>\n<ol>\n<li><strong>Crawling<\/strong>: Googlebot requests a URL from the server.<\/li>\n<li><strong>First wave of indexing<\/strong>: indexes the content that is painted on the server instantly and new links are obtained for crawling.<\/li>\n<li><strong>Generates the HTML that is painted on the client by executing the JavaScript<\/strong>. This process is computationally very costly (it can be done on the spot or <strong>even take days,<\/strong> while waiting for resources to be available to do it).<\/li>\n<li><strong>Second wave of indexing<\/strong>: with the HTML painted on the client, the missing content is indexed and new links are obtained for crawling.<\/li>\n<\/ol>\n<figure id=\"attachment_32281\" aria-describedby=\"caption-attachment-32281\" style=\"width: 900px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-32281 size-full\" src=\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/funcionamiento-google-bot.png\" alt=\"Diagram of how Google Bot works\" width=\"900\" height=\"505\" srcset=\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/funcionamiento-google-bot.png 900w, https:\/\/www.humanlevel.com\/wp-content\/uploads\/funcionamiento-google-bot-720x404.png 720w, https:\/\/www.humanlevel.com\/wp-content\/uploads\/funcionamiento-google-bot-768x431.png 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><figcaption id=\"caption-attachment-32281\" class=\"wp-caption-text\">Diagram of <a title=\"Go to Googlebot definition\" href=\"https:\/\/www.humanlevel.com\/en\/digital-marketing-dictionary\/googlebot\" target=\"_blank\" rel=\"noopener noreferrer\">Googlebot<\/a> operation. Source: <a href=\"https:\/\/www.youtube.com\/watch?v=PFwUbgvpdaQ&amp;t=861s\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.youtube.com\/watch?v=PFwUbgvpdaQ&amp;t=861s<\/a><\/figcaption><\/figure>\n<p>Apart from the fact that <strong>pages may take longer to be fully indexed, thus delaying the indexing of pages linked from them,<\/strong> <strong>if a page is painted slowly, the Googlebot <em>renderer<\/em> may leave parts unpainted<\/strong>. In tests that we have performed from the <strong>&#8220;crawl as Google&#8221;<\/strong> option <strong> of Google Search Console<\/strong>, we have not seen anything that takes more than 5 seconds to be displayed in the screenshot it generates. However, it does index the generated HTML after these 5 seconds. To understand why this happens, it is necessary to take into account that <strong>the Google Search Console <em>renderer<\/em> first builds the HTML by running the JavaScript with the Googlebot <em>renderer<\/em> and then paints the pixels on the page.<\/strong>The first task is the one to be taken into account for indexing and is referred to by the term CSR. <strong>In Google Search Console we can see the HTML generated in the first wave of indexing and not the one generated by the Googlebot <em>renderer <\/em><\/strong>.<\/p>\n\n<figure id=\"attachment_32308\" aria-describedby=\"caption-attachment-32308\" style=\"width: 925px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-32308 size-full\" src=\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/test-optimizacion-moviles.png\" alt=\"Google test for mobile optimization\" width=\"925\" height=\"658\" srcset=\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/test-optimizacion-moviles.png 925w, https:\/\/www.humanlevel.com\/wp-content\/uploads\/test-optimizacion-moviles-720x512.png 720w, https:\/\/www.humanlevel.com\/wp-content\/uploads\/test-optimizacion-moviles-768x546.png 768w\" sizes=\"auto, (max-width: 925px) 100vw, 925px\" \/><figcaption id=\"caption-attachment-32308\" class=\"wp-caption-text\"><a href=\"https:\/\/search.google.com\/test\/mobile-friendly\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/search.google.com\/test\/mobile-friendly<\/a><\/figcaption><\/figure>\n<p><strong>In tests that we have performed, when the HTML painting has taken more than 19 seconds, it has not indexed anything<\/strong>. Although this is a long time, in certain cases it can be exceeded, especially if we make an intensive use of AJAX, since in these cases, the Google <em>renderer<\/em>, as in any <em>renderer<\/em>, has to wait for the following steps to occur:<\/p>\n<ol>\n<li>The HTML is downloaded and processed to <strong>request the linked files<\/strong> and create the DOM.<\/li>\n<li>The CSS is downloaded, processed to <strong>request the linked files<\/strong> and create the CSSOM.<\/li>\n<li>The <strong>JavaScript<\/strong> is downloaded <strong>, compiled and executed to launch the AJAX request(s<\/strong>).<\/li>\n<li><strong>The AJAX request goes to a request que<\/strong>ue, waiting to be served along with the rest of the requested files.<\/li>\n<li>The <strong>AJAX request<\/strong> is launched <strong>and has to travel through the network to the server<\/strong>.<\/li>\n<li>The server handles the request by returning the response over the network and, finally, you have <strong>to wait for the JavaScript to execute, so that it paints the content in the HTML template of the page<\/strong>.<\/li>\n<\/ol>\n<p><strong>The request and download times of the above process depend on the network and server load at<\/strong> the time, and <strong>Googlebot only uses the HTTP\/1.1 protocol<\/strong>. This is slower than the <a title=\"Go to approved HTTP\/2 protocol standard entry\" href=\"https:\/\/www.humanlevel.com\/en\/blog\/web-development\/http-2-protocol-standard-approved\" target=\"_blank\" rel=\"noopener noreferrer\">HTTP\/2<\/a> protocol because requests are handled one after the other and not all at once. Both the client and server need to allow HTTP\/2 to be used, so <strong>Googlebot will use HTTP\/1.1 even if our server supports HTTP\/2.<\/strong> In short, this means that Googlebot waits for each request to finish before launching the next one and may not try to parallelize some requests by opening several connections, as browsers do (although we don&#8217;t know for sure how it does it). Therefore, we are faced with a situation in which <strong>we could exceed the 19 seconds<\/strong> we have estimated.<\/p>\n<p>Imagine, for example, that between images, CSS, JavaScript and AJAX requests, more than 200 requests are launched, each taking 100 milliseconds. If AJAX requests are at the end of the queue, <strong>we will<\/strong> probably <strong>exceed the time required for their content to be indexed<\/strong>.<\/p>\n<p>On the other hand, due to these CSR performance problems, <strong>we will obtain a worse score for PageSpeed&#8217;s FCP (First Contentful Paint) metric for the paint WPO and consequently worse positioning<\/strong>.<\/p>\n\n<h3><span id=\"Indexing_problems\">Indexing problems:<\/span><\/h3>\n<p>When indexing content that is painted on the client, <strong>Googlebot may encounter the following cases that will prevent the indexing of JavaScript-generated HTML<\/strong>:<\/p>\n<ul>\n<li>A <strong>version of JavaScript<\/strong> is used that is not recognized by the crawler.<\/li>\n<li>It uses a <strong>JavaScript API<\/strong> that Googlebot does not recognize (Web Sockets, WebGL, WebVR, IndexedDB and WebSQL are currently known to be unsupported &#8211; more information at <a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/javascript\/fix-search-javascript?hl=es\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/developers.google.com\/search\/docs\/guides\/rendering)<\/a>.<\/li>\n<li><strong>JavaScript files are blocked by robots<\/strong>.<\/li>\n<li><strong>JavaScript files are served over HTTP and the web is in HTTPS<\/strong>.<\/li>\n<li>There are JavaScript <strong>errors<\/strong>.<\/li>\n<li>If the application asks <strong>the user<\/strong> for <strong>permissions<\/strong> to do something and it depends on this that the main content is painted, it will not be painted because Googlebot denies by default any permissions asked for.<\/li>\n<\/ul>\n<p>To find out if we have any of these problems, we must use Google&#8217;s &#8220;<a href=\"https:\/\/search.google.com\/test\/mobile-friendly\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>mobile friendly test<\/strong><\/a>&#8220;. It shows us a screenshot of <a href=\"https:\/\/www.humanlevel.com\/en\/digital-marketing-dictionary\/rendering\" target=\"_blank\" rel=\"noopener noreferrer\">how the page is painted on the screen<\/a>. The same as Google Search Console does, but in addition, it also shows us <strong>the code generated by the <em>renderer <\/em> <\/strong>(as we have already mentioned), the records of <strong>JavaScript error logs<\/strong> that the code may have and the <strong>JavaScript functionalities that the renderer does not yet know how to interpret<\/strong>. So we should apply this tool to the representative URLs of each page template of the site, in order to be sure that the site is indexable.<\/p>\n<p>In the HTML generated by the previous tool, we have to take into account that all <strong>the metadata<\/strong> (canonical URL included) will be ignored by the robot since <strong>Google only takes this information into account when it is painted on the server<\/strong>.<\/p>\n<h2><span id=\"CSR_problems_navigating_to_the_next_page\">CSR problems navigating to the next page<\/span><\/h2>\n<p>Now let&#8217;s see what happens when we browse a link when we are already inside the web and the HTML painting is done in the client.<\/p>\n<h3><span id=\"Indexing_problems-2\">Indexing problems<\/span><\/h3>\n<p>In contrast to CSR on initial load,<strong> navigation to the next page by changing the main content to JavaScript is faster than SSR<\/strong>. But we will have problems indexing if:<\/p>\n<ul>\n<li>The links do not have a valid URL in their <strong>href attribute<\/strong> that returns 200 OK.<\/li>\n<li><strong>The server returns error when accessing the URL directly without JavaScript or with JavaScript enabled and clearing all caches<\/strong>. Be careful with this, if we browse the page by clicking on a link, it may appear to work because the loading is done by JavaScript. Even when accessing directly, if the website uses a Service Worker, the website can pretend that it does respond correctly by loading the contents of the Service Worker&#8217;s cache. But Googlebot is a stateless spider, so it doesn&#8217;t take into account any Service Worker cache or any other JavaScript technology like Local Storage or Session Storage, so you will get an error.<\/li>\n<\/ul>\n<p>In addition, for the web to be accessible, the URL must change using JavaScript with the <strong>history API<\/strong> as I explained in the entry <a title=\"Go to accessible and indexable AJAX entry\" href=\"https:\/\/www.humanlevel.com\/en\/blog\/web-development\/indexable-and-accessible-ajax\" target=\"_blank\" rel=\"noopener noreferrer\">AJAX accessible and indexable<\/a>.<\/p>\n<h3><span id=\"What_happens_to_snippets_now_that_Google_can_index_AJAX\">What happens to snippets now that Google can index AJAX?<\/span><\/h3>\n<p>The <strong>snippets are the part of the URL that may appear at the end of the URL and are padded<\/strong>. Example:<\/p>\n<pre><code>http:\/\/www.humanlevel.com\/blog.html#ejemplo<\/code><\/pre>\n<p><strong>This type of URLs never reach the server.<\/strong>are managed only on the client, so that when requesting the above URL from the server, the request for &#8220;http:\/\/www.humanlevel.com\/blog.html&#8221; would arrive and on the client the browser will move the scroll to the document fragment it refers to. <strong>This is the normal usage and the original intention of these URLs<\/strong>, which became popularized with the name <strong>anchor<\/strong>, although an anchor, in reality, is any link (the &#8220;a&#8221; tag in HTML comes from <em>anchor<\/em>). However, in the past,<strong> snippets have also been used to modify URLs by JavaScript in AJAX-loaded pages<\/strong>, with the intention of allowing the user to navigate through the history. This was implemented this way because previously the snippet was the only part of the URL that could be modified by JavaScript, so developers took advantage of this to give them a use for which they were not intended. This changed years ago with the appearance of the history API, since it already allowed the entire URL to be modified by JavaScript.<\/p>\n<p>When Google was not able to index AJAX, if a URL changed its content using AJAX based on the snippet part of it, we knew that only the URL and the content without the snippet would be indexed. So what happens to pages with snippets now that Google is able to index AJAX? The behavior is exactly the same. <strong>If we link to a page with a snippet and it changes its content when accessed with the snippet, the content it had without the snippet will be indexed and the popularity will go to this URL<\/strong>because Google trusts that the snippet will be used as an anchor and not to change the content, as it should be.<\/p>\n<p>However, Google does currently index URLs with hashbang (#!). This is implemented without having to do anything more than add the exclamation, and Google makes it work to maintain backward compatibility with an obsolete specification to make AJAX indexable. But it is not recommended to do this because it is now implemented with the history API and also because <strong>Google could stop indexing hashbang URLs at any time<\/strong>.<\/p>\n<h2><span id=\"Blocking_indexing_of_partial_responses_by_AJAX\">Blocking indexing of partial responses by AJAX<\/span><\/h2>\n<p>When <strong>an AJAX request<\/strong> is launched <strong>to URLs<\/strong> of a REST API or GraphQL, <strong>a JSON or a page snippet is returned that we do not want to be indexed<\/strong>. So <strong>the indexing of <\/strong><strong>the URLs to which these requests are directed<\/strong> <strong>must be blocked <\/strong>.<\/p>\n<p><strong>In the past it was possible to block with robots.txt<\/strong>, but since the Googlebot renderer exists, we can no longer block any resource used for HTML painting.<\/p>\n<p>Nowadays, Google is a little smarter and <strong>not usually<\/strong> try to index the responses with JSONs, but if we want to be sure that they are not indexed, <strong>the universal solution for all spiders is to make URLs used for AJAX only support POST requests, <\/strong>since it is not used by spiders. When a GET request arrives at the server, it should return error 404. For development purposes, this does not force you to remove the parameters in the QueryString part of the URL.<\/p>\n<p>There is also the possibility of adding to AJAX responses the HTTP header &#8220;X-Robots-Tag: noindex&#8221; (invented by Google) or that these responses are returned with 404 or 410 codes. If these techniques are used with content that loads directly from the HTML, it will not be indexed, just as if we had blocked it through the robots.txt file. However, <strong>since it is the JavaScript that paints the response on the page, Google does not establish the relationship between this response and the JavaScript that paints the content<\/strong>, so it does exactly what we want. That is, do not index the partial response and index the entire generated HTML. But beware, this does not mean that someday this behavior will change and we will be deindexed the content loaded by AJAX if we apply this technique.<\/p>\n<h2><span id=\"Conclusion\">Conclusion<\/span><\/h2>\n<p>Google can now index JavaScript and AJAX, but this inevitably comes at a <strong>higher cost than indexing HTML already &#8220;chewed up&#8221; on the server<\/strong>, so SSR is and will be the best option for quite some time to come. But if you have no choice but to deal with a fully CSR website or with some part of it using CSR, you know how to deal with it.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX and what we must do to ensure indexability in Google.<\/p>\n","protected":false},"author":14,"featured_media":47790,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[349],"tags":[357,366],"class_list":["post-52116","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo","tag-indexability","tag-technical-seo","entry"],"yoast_head":"\n<title>How does JavaScript and AJAX affect Google indexing? | Human Level<\/title>\n<meta name=\"description\" content=\"Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How does JavaScript and AJAX affect Google indexing? | Human Level\" \/>\n<meta property=\"og:description\" content=\"Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\" \/>\n<meta property=\"og:site_name\" content=\"Human Level\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-23T06:00:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-11T08:26:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ram\u00f3n Saquete\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Daiatron\" \/>\n<meta name=\"twitter:site\" content=\"@humanlevel\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ram\u00f3n Saquete\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\"},\"author\":{\"name\":\"Ram\u00f3n Saquete\",\"@id\":\"https:\/\/www.humanlevel.com\/en#\/schema\/person\/11ad888926867985985a0210476bae94\"},\"headline\":\"How does JavaScript and AJAX affect Google indexing?\",\"datePublished\":\"2018-07-23T06:00:11+00:00\",\"dateModified\":\"2023-10-11T08:26:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\"},\"wordCount\":2456,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.humanlevel.com\/en#organization\"},\"image\":{\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png\",\"keywords\":[\"Indexability\",\"Technical SEO\"],\"articleSection\":[\"SEO\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\",\"url\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\",\"name\":\"How does JavaScript and AJAX affect Google indexing? | Human Level\",\"isPartOf\":{\"@id\":\"https:\/\/www.humanlevel.com\/en#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png\",\"datePublished\":\"2018-07-23T06:00:11+00:00\",\"dateModified\":\"2023-10-11T08:26:40+00:00\",\"description\":\"Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage\",\"url\":\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png\",\"contentUrl\":\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png\",\"width\":400,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.humanlevel.com\/en\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How does JavaScript and AJAX affect Google indexing?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.humanlevel.com\/en#website\",\"url\":\"https:\/\/www.humanlevel.com\/en\",\"name\":\"Human Level\",\"description\":\"Web positioning and online marketing consultant Human Level\",\"publisher\":{\"@id\":\"https:\/\/www.humanlevel.com\/en#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.humanlevel.com\/en?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.humanlevel.com\/en#organization\",\"name\":\"Human Level\",\"url\":\"https:\/\/www.humanlevel.com\/en\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.humanlevel.com\/en#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/logo-human-negro-1.jpg\",\"contentUrl\":\"https:\/\/www.humanlevel.com\/wp-content\/uploads\/logo-human-negro-1.jpg\",\"width\":268,\"height\":51,\"caption\":\"Human Level\"},\"image\":{\"@id\":\"https:\/\/www.humanlevel.com\/en#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/humanlevel\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.humanlevel.com\/en#\/schema\/person\/11ad888926867985985a0210476bae94\",\"name\":\"Ram\u00f3n Saquete\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.humanlevel.com\/en#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7a50f1a1974393853ee4f2423c9009f813cb107d3e7e20cf17cf8e86d407132e?s=96&d=simple_local_avatar&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7a50f1a1974393853ee4f2423c9009f813cb107d3e7e20cf17cf8e86d407132e?s=96&d=simple_local_avatar&r=g\",\"caption\":\"Ram\u00f3n Saquete\"},\"description\":\"Desarrollador web y consultor SEO t\u00e9cnico en Human Level. Graduado en Ingenier\u00eda Inform\u00e1tica e Ingenier\u00eda T\u00e9cnica en Inform\u00e1tica de Sistemas. Tambi\u00e9n es T\u00e9cnico Superior en Desarrollo de Aplicaciones Inform\u00e1ticas y posteriormente obtuvo la Certificaci\u00f3n de Aptitud Pedag\u00f3gica. Experto en WPO e indexabilidad.\",\"sameAs\":[\"https:\/\/x.com\/Daiatron\"],\"url\":\"https:\/\/www.humanlevel.com\/en\/author\/ramon\"}]}<\/script>\n","yoast_head_json":{"title":"How does JavaScript and AJAX affect Google indexing? | Human Level","description":"Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing","og_locale":"en_US","og_type":"article","og_title":"How does JavaScript and AJAX affect Google indexing? | Human Level","og_description":"Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX.","og_url":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing","og_site_name":"Human Level","article_published_time":"2018-07-23T06:00:11+00:00","article_modified_time":"2023-10-11T08:26:40+00:00","og_image":[{"width":400,"height":400,"url":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png","type":"image\/png"}],"author":"Ram\u00f3n Saquete","twitter_card":"summary_large_image","twitter_creator":"@Daiatron","twitter_site":"@humanlevel","twitter_misc":{"Written by":"Ram\u00f3n Saquete","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#article","isPartOf":{"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing"},"author":{"name":"Ram\u00f3n Saquete","@id":"https:\/\/www.humanlevel.com\/en#\/schema\/person\/11ad888926867985985a0210476bae94"},"headline":"How does JavaScript and AJAX affect Google indexing?","datePublished":"2018-07-23T06:00:11+00:00","dateModified":"2023-10-11T08:26:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing"},"wordCount":2456,"commentCount":0,"publisher":{"@id":"https:\/\/www.humanlevel.com\/en#organization"},"image":{"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage"},"thumbnailUrl":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png","keywords":["Indexability","Technical SEO"],"articleSection":["SEO"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing","url":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing","name":"How does JavaScript and AJAX affect Google indexing? | Human Level","isPartOf":{"@id":"https:\/\/www.humanlevel.com\/en#website"},"primaryImageOfPage":{"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage"},"image":{"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage"},"thumbnailUrl":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png","datePublished":"2018-07-23T06:00:11+00:00","dateModified":"2023-10-11T08:26:40+00:00","description":"Discover the problems we can encounter when we have a website where the HTML is painted on the client with JavaScript and AJAX.","breadcrumb":{"@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#primaryimage","url":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png","contentUrl":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/javascript-ayax-indexaci\u00f3n-e1569939066119.png","width":400,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/www.humanlevel.com\/en\/blog\/seo\/how-does-javascript-and-ajax-affect-google-indexing#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.humanlevel.com\/en"},{"@type":"ListItem","position":2,"name":"How does JavaScript and AJAX affect Google indexing?"}]},{"@type":"WebSite","@id":"https:\/\/www.humanlevel.com\/en#website","url":"https:\/\/www.humanlevel.com\/en","name":"Human Level","description":"Web positioning and online marketing consultant Human Level","publisher":{"@id":"https:\/\/www.humanlevel.com\/en#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.humanlevel.com\/en?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.humanlevel.com\/en#organization","name":"Human Level","url":"https:\/\/www.humanlevel.com\/en","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.humanlevel.com\/en#\/schema\/logo\/image\/","url":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/logo-human-negro-1.jpg","contentUrl":"https:\/\/www.humanlevel.com\/wp-content\/uploads\/logo-human-negro-1.jpg","width":268,"height":51,"caption":"Human Level"},"image":{"@id":"https:\/\/www.humanlevel.com\/en#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/humanlevel"]},{"@type":"Person","@id":"https:\/\/www.humanlevel.com\/en#\/schema\/person\/11ad888926867985985a0210476bae94","name":"Ram\u00f3n Saquete","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.humanlevel.com\/en#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7a50f1a1974393853ee4f2423c9009f813cb107d3e7e20cf17cf8e86d407132e?s=96&d=simple_local_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7a50f1a1974393853ee4f2423c9009f813cb107d3e7e20cf17cf8e86d407132e?s=96&d=simple_local_avatar&r=g","caption":"Ram\u00f3n Saquete"},"description":"Desarrollador web y consultor SEO t\u00e9cnico en Human Level. Graduado en Ingenier\u00eda Inform\u00e1tica e Ingenier\u00eda T\u00e9cnica en Inform\u00e1tica de Sistemas. Tambi\u00e9n es T\u00e9cnico Superior en Desarrollo de Aplicaciones Inform\u00e1ticas y posteriormente obtuvo la Certificaci\u00f3n de Aptitud Pedag\u00f3gica. Experto en WPO e indexabilidad.","sameAs":["https:\/\/x.com\/Daiatron"],"url":"https:\/\/www.humanlevel.com\/en\/author\/ramon"}]}},"_links":{"self":[{"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/posts\/52116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/comments?post=52116"}],"version-history":[{"count":4,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/posts\/52116\/revisions"}],"predecessor-version":[{"id":54831,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/posts\/52116\/revisions\/54831"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/media\/47790"}],"wp:attachment":[{"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/media?parent=52116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/categories?post=52116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.humanlevel.com\/en\/wp-json\/wp\/v2\/tags?post=52116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}