本指南介绍了如何识别和解决一些 JavaScript 问题,这些问题可能会导致您的网页(或 JavaScript 网页上的特定内容)无法显示在 Google 搜索结果中。虽然 Googlebot 可以运行 JavaScript,但您在设计网页和应用时需要考虑一些差异和限制,以顺应抓取工具访问和呈现内容的方式。
Googlebot 经过精心设计,是一名优秀的网上公民。它的主要任务是抓取网站,同时确保其抓取操作不会导致网站的用户体验下降。Googlebot 及其网页呈现服务 (WRS) 组件会不断分析和识别对基本网页内容没有贡献的资源,并且可能不会抓取此类资源。例如,对基本网页内容没有贡献的报告和错误请求,以及在提取基本网页内容时不使用或没必要使用的其他类似类型的请求。
如果您怀疑 JavaScript 问题可能会导致您的网页或 JavaScript 网页上的特定内容无法显示在 Google 搜索结果中,请按以下步骤操作:
- 如需测试 Google 抓取和呈现网址的效果,请使用 Search Console 中的移动设备适合性测试或网址检查工具。您可以查看已加载的资源、JavaScript 控制台输出和异常、呈现的 DOM 以及更多信息。
此外,我们还建议您收集和审核用户(包括 Googlebot)在您网站上遇到的 JavaScript 错误,确定可能会影响内容呈现效果的潜在问题。
示例
以下示例演示了如何记录全局 onerror 处理程序中记录的 JavaScript 错误。
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); });
- 请务必防范软 404 错误。在单页应用 (SPA) 中,这可能会非常困难。为防止将错误网页编入索引,您可以使用以下一种或两种策略:
- 重定向至服务器响应 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'; } });
- 添加漫游器元标记 noindex 或将漫游器元标记更改为 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); } });
- 重定向至服务器响应 404 状态代码的网址。
- Googlebot 可能会拒绝用户权限请求。
- 请勿使用片段网址加载不同的内容。
- 不要依赖数据持久性来提供内容。
- 使用内容指纹避免 Googlebot 缓存问题。
- 确保您的应用针对其所需的所有关键 API 使用功能检测,并在适用情况下提供后备行为或 Polyfill。
- 确保您的内容适用于 HTTP 连接。
- 确保网络组件能按预期呈现。使用移动设备适合性测试或网址检查工具检查呈现的 HTML 是否包含您期望的所有内容。
- 修正此核对清单中的内容后,请再次使用 Search Console 中的移动设备适合性测试或网址检查工具测试您的网页。如果问题已解决,系统会显示一个绿色对勾标记,并且不会显示任何错误。如果仍看到错误,请在 JavaScript Sites in Search Working Group 中发帖咨询。