Angular を使用してSPAページを設定し、 Rendertron を介してサーバー側レンダリングの効果を達成しました facebookデバッグツール で、動的に生成されたメタデータですが、Googleコンソール検索のプレビューが空白でした
GooglebotがDOM自体を動的にレンダリングできることを理解していますが、なぜそれが常に空白なのですか? HTMLの構造に問題がありますか?
この問題を通して、私はそれを解決する方法を見つけました
angular.ioがインデックス付けされなくなったようです
Angularは、サーバー側のレンダリング方法を使用せずに、Googlebotによってインデックスを作成できます。
デバッグ方法
次のコードをindex.html
に追加し、Google Search Consoleを開いてクロールします。
ユーザーエージェントがGoogleBotであるというエラーメッセージでデバッグできます
https://developers.google.com/search/docs/guides/debug-rendering
window.addEventListener('error', function(e) {
var errorText = [
// key point of debug
'UserAgent: ' + navigator.userAgent ,
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);
});
考えられる理由
1。未使用のポリフィル
@ MrCroft
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
の下の次の行のコメントを外します。
2。最新にアップグレードAngular version
考えられる問題を特定しやすくなります
https://github.com/angular/angular/issues/21272#issuecomment-370153525