Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.
Soluciona problemas de JavaScript relacionados con la Búsqueda
Esta guía te ayudará a identificar y solucionar los problemas de JavaScript que podrían impedir que tu página (o que el contenido específico en las páginas con tecnología JavaScript) aparezca en la Búsqueda de Google. Si bien la Búsqueda de Google ejecuta JavaScript, hay algunas diferencias y limitaciones que debes considerar cuando diseñes tus aplicaciones y páginas para ajustar la manera en que los rastreadores acceden a tu contenido y lo procesan. En nuestra Guía sobre aspectos básicos de JavaScript SEO encontrarás más información sobre cómo optimizar tu sitio de JavaScript para la Búsqueda de Google.
Googlebot está diseñado para usar la Web de manera apropiada. Si bien su prioridad es el rastreo, también se asegura de no perjudicar la experiencia de los usuarios que visitan el sitio. Junto con su componente de Servicio de procesamiento web (WRS), Googlebot identifica y analiza continuamente recursos que no contribuyen al contenido esencial de la página, y es posible que no recupere tales recursos. Un ejemplo son las solicitudes de informes y errores que no contribuyen al contenido esencial de la página, así como otros tipos de solicitudes similares, que no se utilizan o no son necesarias para extraer el contenido esencial de la página. Es posible que las estadísticas del cliente no brinden una representación completa o precisa de la actividad de WRS y Googlebot en tu sitio. Usa el informe de estadísticas de rastreo en Google Search Console para supervisar la actividad y los comentarios de WRS y Googlebot relacionados con tu sitio.
Si sospechas que los problemas de JavaScript impiden que tu página (o el contenido específico de las páginas que utilizan JavaScript) aparezca en la Búsqueda de Google, sigue estos pasos. En caso de que no sepas con certeza si JavaScript es la causa principal, sigue nuestra guía de depuración general para determinar el problema específico.
- Para probar el modo en que Google rastrea y procesa una URL, usa la Prueba de resultados enriquecidos o la Herramienta de inspección de URLs de Search Console. Podrás ver recursos cargados, resultados y excepciones de la Consola de JavaScript, DOM renderizados y otros detalles.
De manera opcional te recomendamos que recopiles y audites los errores de JavaScript que encuentren en tu sitio los usuarios (incluido Googlebot) para identificar problemas potenciales que puedan afectar la manera en que se procesa el contenido. Aquí tienes un ejemplo en el que se muestra cómo registrar los errores de JavaScript que se incluyen en el controlador de onerror global. Nota: Hay algunos tipos de errores de JavaScript, como los de análisis, que no se pueden registrar con este método.
window.addEventListener('error', function(e) { var errorText = [ e.message, 'URL: ' + e.filename, 'Line: ' + e.lineno + ', Column: ' + e.colno, 'Stack: ' + (e.error && e.error.stack || '(no stack trace)') ].join('\n'); // Example: log errors as visual output into the host page. // Note: you probably don't want to show such errors to users, or // have the errors get indexed by Googlebot; however, it may // be a useful feature while actively debugging the page. var DOM_ID = 'rendering-debug-pre'; if (!document.getElementById(DOM_ID)) { var log = document.createElement('pre'); log.id = DOM_ID; log.style.whiteSpace = 'pre-wrap'; log.textContent = errorText; if (!document.body) document.body = document.createElement('body'); document.body.insertBefore(log, document.body.firstChild); } else { document.getElementById(DOM_ID).textContent += '\n\n' + errorText; } // Example: log the error to remote service. // Note: you can log errors to a remote service, to understand // and monitor the types of errors encountered by regular users, // Googlebot, and other crawlers. var client = new XMLHttpRequest(); client.open('POST', 'https://example.com/logError'); client.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8'); client.send(errorText); });
- Asegúrate de evitar los errores de
soft 404
. En una aplicación de una sola página (SPA), esto puede ser bastante difícil. Para evitar que se indexen páginas de error, puedes usar una de las siguientes estrategias o ambas: - Redireccionar a una URL en la que el servidor responde con un código de estado
404
. fetch(`https://api.kitten.club/cats/${id}`) .then(res => res.json()) .then((cat) => { if (!cat.exists) { // redirect to page that gives a 404 window.location.href = '/not-found'; } });
- Agrega o cambia la etiqueta robots
meta
a noindex
. fetch(`https://api.kitten.club/cats/${id}`) .then(res => res.json()) .then((cat) => { if (!cat.exists) { const metaRobots = document.createElement('meta'); metaRobots.name = 'robots'; metaRobots.content = 'noindex'; document.head.appendChild(metaRobots); } });
Cuando una SPA usa JavaScript del cliente para procesar errores, a menudo informa un código de estado HTTP 200
en lugar del código de estado adecuado. Esto puede provocar que se indexen las páginas de error y, posiblemente, se muestren en los resultados de la búsqueda.
- Googlebot rechazará las solicitudes de permiso del usuario.
Googlebot (o los usuarios en general) no comprenden las funciones que requieren permisos de usuario. Por ejemplo, si estableces que Camera API
sea un requisito, Googlebot no podrá proporcionarte una cámara. En su lugar, ofrece un método para que los usuarios puedan acceder a tu contenido sin verse obligados a otorgar acceso a la cámara. - No uses fragmentos de URL para cargar diferentes tipos de contenido.
Una SPA puede usar fragmentos de URL (por ejemplo, https://example.com/#/productos) para cargar diferentes vistas. El esquema de rastreo AJAX dejó de estar disponible en 2015, por lo que no puedes confiar en que los fragmentos de URLs funcionen con Googlebot. Te recomendamos que uses la API de History para cargar distintos tipos de contenido en función de la URL de una SPA. - No confíes en la persistencia de datos para publicar contenido.
WRS carga cada URL (consulta el documento sobre el funcionamiento de la Búsqueda de Google para obtener una descripción general sobre el modo en que Google descubre contenido) siguiendo los redireccionamientos de servidores y clientes, de la misma manera en que lo hace un navegador común. Sin embargo, WRS no conserva su estado en todas las cargas de páginas: - Los datos de almacenamiento local y de sesión se borran entre una carga de página y otra.
- Las cookies HTTP se borran entre una carga de página y otra.
- Usa el reconocimiento de huellas digitales de contenido para evitar problemas de almacenamiento en caché con Googlebot.
Googlebot almacena en caché de forma resolutiva para reducir las solicitudes de red y el uso de recursos. WRS puede ignorar los encabezados de almacenamiento en caché. Como consecuencia, es posible que WRS use recursos JavaScript o CSS desactualizados. El reconocimiento de huellas digitales de contenido evita este problema porque incluye una huella digital de contenido como parte del nombre del archivo, por ejemplo, main.2bb85551.js
. La huella digital depende del contenido del archivo, por lo que cada vez que se lanza una actualización se genera un nombre de archivo diferente. Consulta la guía de web.dev sobre estrategias de almacenamiento en caché de larga duración para obtener más información. - Asegúrate de que tu aplicación use la detección de funciones para todas las APIs principales que necesite y proporciona un polyfill o un comportamiento de resguardo cuando corresponda.
Es posible que no todos los usuarios-agentes hayan adoptado ciertas funciones web, y puede que algunos inhabiliten funciones intencionalmente. Por ejemplo, si usas WebGL para procesar los efectos de una foto en el navegador, la detección de funciones mostrará que Googlebot no admite WebGL. Para solucionar este problema, puedes omitir el efecto de la foto o usar el procesamiento del servidor para procesar previamente los efectos de la foto, lo que permitirá que todo el mundo pueda acceder a tu contenido, incluido Googlebot. - Asegúrate de que tu contenido funcione con conexiones HTTP.
Googlebot usa solicitudes HTTP para recuperar contenido de tu servidor. No admite otros tipos de conexiones, como WebSockets
o WebRTC
. A fin de evitar problemas con estas conexiones, asegúrate de proporcionar un resguardo de HTTP para recuperar contenido y usar la detección de funciones y un sistema de resolución de errores sólido. - Asegúrate de que los componentes web se procesen según lo esperado. Usa la Prueba de resultados enriquecidos o la Herramienta de inspección de URLs para comprobar si el código HTML procesado tiene todo el contenido que esperas.
WRS acopla los DOM claros y oscuros. Si los componentes web que usas no utilizan el mecanismo <slot>
para contenido de DOM claros, consulta la documentación del componente web para obtener más información o utiliza otro componente web. Si quieres obtener más información, consulta las prácticas recomendadas para componentes web. - Una vez que corrijas todos los elementos de la lista de tareas, vuelve a probar tu página con la Prueba de resultados enriquecidos o la Herramienta de inspección de URL en Search Console.
Si el problema se solucionó, aparecerá una marca de verificación verde y no se mostrará ningún error. Si aún ves errores, publícalos en la Comunidad de ayuda de la Central de la Búsqueda.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-08-04 (UTC)
[null,null,["Última actualización: 2025-08-04 (UTC)"],[[["\u003cp\u003eThis guide helps you identify and fix JavaScript issues that may be preventing your website content from appearing correctly in Google Search.\u003c/p\u003e\n"],["\u003cp\u003eUse the Rich Results Test or the URL Inspection Tool to see how Googlebot crawls and renders your web pages, including loaded resources, JavaScript errors, and the rendered DOM.\u003c/p\u003e\n"],["\u003cp\u003eEnsure your single-page application handles soft 404 errors correctly by redirecting to a 404 page or using the noindex meta tag for error pages.\u003c/p\u003e\n"],["\u003cp\u003eAvoid using URL fragments for loading content and rely on the History API instead, and ensure your web components render as expected by using the \u003ccode\u003e<slot>\u003c/code\u003e mechanism for light DOM content.\u003c/p\u003e\n"],["\u003cp\u003eGooglebot has limitations, such as declining permission requests and not supporting data persistence or connections like WebSockets and WebRTC, so design your content accordingly with fallbacks.\u003c/p\u003e\n"]]],["To resolve JavaScript-related search issues, first, test how Google crawls and renders your URLs using the Rich Results Test or URL Inspection Tool. Collect and audit JavaScript errors. Prevent soft 404 errors by redirecting or adding a \"noindex\" meta tag. Avoid relying on user permission requests, URL fragments, or data persistence. Employ content fingerprinting to avoid caching issues. Use feature detection for critical APIs, ensure HTTP connection compatibility, and verify web component rendering. Finally, retest your page after fixes.\n"],null,["Fix Search-related JavaScript problems\n\n\nThis guide helps you identify and fix JavaScript issues that may be blocking your page, or specific content on JavaScript powered pages, from showing up in Google Search.\nWhile Google Search does run JavaScript, there are some differences and limitations that you need to account for when designing your pages and applications to accommodate how crawlers access and render your content.\nOur [guide on JavaScript SEO basics](/search/docs/guides/javascript-seo-basics) has more information on how you can optimize your JavaScript site for Google Search.\n\nGooglebot is designed to be a good citizen of the web. Crawling is its [main priority](/search/blog/2017/01/what-crawl-budget-means-for-googlebot), while making sure it doesn't degrade the experience of users visiting the site.\nGooglebot and its Web Rendering Service (WRS) component continuously analyze and identify resources that don't contribute to essential page content and may not fetch such resources.\nFor example, reporting and error requests that don't contribute to essential page content, and other similar types of requests are unused or unnecessary to extract essential page content. Client-side analytics may not provide a full or accurate representation of Googlebot and WRS activity on your site.\nUse [the crawl stats report in Google Search Console](https://support.google.com/webmasters/answer/9679690) to monitor Googlebot and WRS activity and feedback on your site.\n\n\nIf you suspect that JavaScript issues might be blocking your page, or specific content on JavaScript powered pages, from showing up in Google Search, follow these steps. If you're not sure if JavaScript is the main cause, follow our [general debugging guide](/search/docs/guides/debug) to determine the specific issue.\n\n1. **To test how Google crawls and renders a URL** , use the [Rich Results Test](https://search.google.com/test/rich-results) or the [URL Inspection Tool](https://support.google.com/webmasters/answer/9012289) in Search Console. You can see loaded resources, JavaScript console output and exceptions, rendered DOM, and more information.\n\n\n Optionally, we also recommend collecting and auditing JavaScript errors encountered by users, including Googlebot, on your site to identify potential issues that may affect how content is rendered.\n Here's an example that shows how to log JavaScript errors that are logged in the [global onerror handler](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror). Note that some types of JavaScript errors, such as a parse error, cannot be logged with this method. \n\n ```javascript\n window.addEventListener('error', function(e) {\n var errorText = [\n e.message,\n 'URL: ' + e.filename,\n 'Line: ' + e.lineno + ', Column: ' + e.colno,\n 'Stack: ' + (e.error && e.error.stack || '(no stack trace)')\n ].join('\\n');\n\n // Example: log errors as visual output into the host page.\n // Note: you probably don't want to show such errors to users, or\n // have the errors get indexed by Googlebot; however, it may\n // be a useful feature while actively debugging the page.\n var DOM_ID = 'rendering-debug-pre';\n if (!document.getElementById(DOM_ID)) {\n var log = document.createElement('pre');\n log.id = DOM_ID;\n log.style.whiteSpace = 'pre-wrap';\n log.textContent = errorText;\n if (!document.body) document.body = document.createElement('body');\n document.body.insertBefore(log, document.body.firstChild);\n } else {\n document.getElementById(DOM_ID).textContent += '\\n\\n' + errorText;\n }\n\n // Example: log the error to remote service.\n // Note: you can log errors to a remote service, to understand\n // and monitor the types of errors encountered by regular users,\n // Googlebot, and other crawlers.\n var client = new XMLHttpRequest();\n client.open('POST', 'https://example.com/logError');\n client.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');\n client.send(errorText);\n\n });\n ```\n2. **Make sure to prevent [`soft 404` errors](/search/docs/crawling-indexing/http-network-errors#soft-404-errors).** In a single-page application (SPA), this can be especially difficult. To prevent error pages from being indexed, you can use one or both of the following strategies:\n - Redirect to a URL where the server responds with a `404` status code. \n\n ```javascript\n fetch(`https://api.kitten.club/cats/${id}`)\n .then(res =\u003e res.json())\n .then((cat) =\u003e {\n if (!cat.exists) {\n // redirect to page that gives a 404\n window.location.href = '/not-found';\n }\n });\n ```\n - Add or change the robots `meta` tag to `noindex`. \n\n ```javascript\n fetch(`https://api.kitten.club/cats/${id}`)\n .then(res =\u003e res.json())\n .then((cat) =\u003e {\n if (!cat.exists) {\n const metaRobots = document.createElement('meta');\n metaRobots.name = 'robots';\n metaRobots.content = 'noindex';\n document.head.appendChild(metaRobots);\n }\n });\n ```\n\n\n When a SPA is using client-side JavaScript to handle errors they often report a `200` HTTP status code instead of the [appropriate status code](/search/docs/crawling-indexing/javascript/javascript-seo-basics#use-meaningful-http-status-codes). This can lead to error pages being indexed and possibly shown in search results.\n3. **Expect Googlebot to decline [user permission requests](https://w3c.github.io/permissions/#permission-registry).** \n Features that require user permission don't make sense for Googlebot, or for all users. For example, if you make the `Camera API` required, Googlebot can't provide a camera to you. Instead, provide a way for users to access your content without being forced to allow camera access.\n4. **Don't use URL fragments to load different content.** \n A SPA may use URL fragments (for example https://example.com/#/products) for loading different views. The [AJAX-crawling scheme has been deprecated](/search/blog/2015/10/deprecating-our-ajax-crawling-scheme) since 2015, so you can't rely on URL fragments to work with Googlebot. We recommend using the [History API](https://developer.mozilla.org/en-US/docs/Web/API/History) to load different content based on the URL in a SPA.\n5. **Don't rely on data persistence to serve content.** \n WRS loads each URL (refer to [How Google Search Works](/search/docs/fundamentals/how-search-works) for an overview of how Google discovers content), following server and client redirects, same as a regular browser. However, WRS does not retain state across page loads:\n - Local Storage and Session Storage data are cleared across page loads.\n - HTTP Cookies are cleared across page loads.\n6. **Use content fingerprinting to avoid caching issues with Googlebot.** \n Googlebot caches aggressively in order to reduce network requests and resource usage. WRS may ignore caching headers. This may lead WRS to use outdated JavaScript or CSS resources. Content fingerprinting avoids this problem by making a fingerprint of the content part of the filename, like `main.2bb85551.js`. The fingerprint depends on the content of the file, so updates generate a different filename every time. Check out the [web.dev guide on long-lived caching strategies](https://web.dev/articles/http-cache#versioned-urls) to learn more.\n7. **Ensure that your application uses [feature detection](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Cross_browser_testing/Feature_detection) for all critical APIs that it needs and provide a fallback behavior or polyfill where applicable.** \n Some web features may not yet be adopted by all user agents and some may intentionally disable certain features. For example, if you use WebGL to render photo effects in the browser, feature detection shows that Googlebot doesn't support WebGL. To fix this, you could skip the photo effect or decide to use server-side rendering to prerender the photo effects, which makes your content accessible to everyone, including Googlebot.\n8. **Make sure your content works with HTTP connections.** \n Googlebot uses HTTP requests to retrieve content from your server. It does not support other types of connections, such as [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) or [WebRTC](https://developer.mozilla.org/en-US/docs/Glossary/WebRTC) connections. To avoid problems with such connections, make sure to provide an HTTP fallback to retrieve content and use robust error handling and [feature detection](#feature-detection).\n9. **Make sure your web components render as expected.** Use the [Rich Results Test](https://search.google.com/test/rich-results) or the [URL Inspection Tool](https://support.google.com/webmasters/answer/9012289) to check if the rendered HTML has all content you expect. \n WRS flattens the [light DOM and shadow DOM](/web/fundamentals/web-components/shadowdom#lightdom). If the web components you use aren't using [`\u003cslot\u003e` mechanism](/web/fundamentals/web-components/shadowdom#slots) for light DOM content, consult the documentation of the web component for further information or use another web component instead. For more information, see [best practices for web components](/search/docs/guides/javascript-seo-basics#web-components).\n10. **After you fix the items in this checklist, test your page** with the [Rich Results Test](https://search.google.com/test/rich-results) or the [URL inspection tool](https://search.google.com/search-console) in Search Console again.\n\n If you fixed the issue, a green check mark appears and no errors display. If you still see errors, post in the [Search Central help community](https://support.google.com/webmasters/community)."]]