我在我的 angular 版本 4 应用程序中使用 ng2-metadata 并且 google 似乎只显示默认标题和描述
I'm using ng2-metadata with my angular version 4 app and google only seems to show the default title and description
我在我的 angular 应用程序中使用 ng2-metadata,google 似乎只显示默认标题和元描述。
我的技术: Angular 版本 4,用于托管的 webpack、typescript 和 firebase。
我正在部署一个 AOT 构建,并且添加了 ng2-metadata aot 函数,如下面 link 建议的那样。
这是我正在使用的包: https://www.npmjs.com/package/ng2-metadata
当前问题:
代码似乎可以在浏览器中正常运行,但 google 机器人似乎不会在 google 搜索结果中显示其他页面的标题和元标记。
*我已经完成了网站管理员工具的抓取请求以索引页面,即使它是 SPA。
这是我的博客页面的路线之一(我删除了一些文字):
import { Route} from '@angular/router';
import { BlogComponent } from './blog.component';
export const BlogRoutes: Route[] = [
{
path: 'blog',
component: BlogComponent,
data : {
metadata : {
title : 'My Website | Blog',
override : true,
description : "The latest news & blog post....",
keywords: "blog, reading, posts"
}
}
}
];
许多爬虫不能很好地与单页应用程序配合使用。您可以将 https://prerender.io/ or https://www.prerender.cloud/. I am using https://www.prerender.cloud/ 之类的预渲染解决方案与 Netlify 一起使用,效果很好。
如果您想继续使用 Firebase 托管,请尽量减少机器人访问页面时调用的代码。不要加载任何库或 运行 任何东西,除了呈现机器人和爬虫所需的标签和数据所必需的东西。示例如下。
index.html
<script>
(function(w,d){
w.myApp = w.myApp || {}; w.myApp.robot = false;
var AM_I_ROBOTS = ['googlebot', 'twitterbot', 'facebookexternalhit', 'google.com/bot.html', 'facebook.com/externalhit_uatext.php', 'tweetmemebot', 'sitebot', 'msnbot', 'robot', 'bot', 'spider', 'crawl'];
var ua = navigator.userAgent.toLowerCase(); w.myApp.userAgent = ua;
for (var i = 0, len = AM_I_ROBOTS.length; i < len; i++) { if(ua.indexOf(AM_I_ROBOTS[i]) !== -1 ) { w.myApp.robot = true; break; }}
})(window,document);
</script>
<script>
if(!window.myApp.robot){
// Google Analytics code
}
</script>
<script>
if(!window.myApp.robot){
// Facebook Connect code
}
</script>
app.component.ts
export class AppComponent implements OnDestroy, OnInit, AfterViewInit {
...
public webRobot: boolean = false;
private static AM_I_ROBOTS:[string] = ['googlebot', 'twitterbot', 'facebookexternalhit', 'google.com/bot.html',
'facebook.com/externalhit_uatext.php', 'tweetmemebot', 'sitebot', 'msnbot', 'robot',
'bot', 'spider', 'crawl'];
...
constructor(private auth: Auth,
private localStorage: LocalStorageService,
private meta: MetaService,
...
private otherService: OtherService,
) {
}
ngOnInit(): void {
this.init();
}
init() {
const robots = AppComponent.AM_I_ROBOTS;
const ua = navigator.userAgent.toLowerCase();
for (var i = 0, len = robots.length; i < len; i++) {
if(ua.indexOf(robots[i]) !== -1 ) {
this.webRobot = true;
break;
}
}
// for service that should be informed to
// run minimally with robots
this.otherService.init(this.webRobot);
// for service that should not be called with robots
if (!this.webRobot) {
this.auth.init();
// etc.
}
}
Angular4自带元服务Angular通用,你可以试试
我在我的 angular 应用程序中使用 ng2-metadata,google 似乎只显示默认标题和元描述。
我的技术: Angular 版本 4,用于托管的 webpack、typescript 和 firebase。
我正在部署一个 AOT 构建,并且添加了 ng2-metadata aot 函数,如下面 link 建议的那样。
这是我正在使用的包: https://www.npmjs.com/package/ng2-metadata
当前问题:
代码似乎可以在浏览器中正常运行,但 google 机器人似乎不会在 google 搜索结果中显示其他页面的标题和元标记。
*我已经完成了网站管理员工具的抓取请求以索引页面,即使它是 SPA。
这是我的博客页面的路线之一(我删除了一些文字):
import { Route} from '@angular/router';
import { BlogComponent } from './blog.component';
export const BlogRoutes: Route[] = [
{
path: 'blog',
component: BlogComponent,
data : {
metadata : {
title : 'My Website | Blog',
override : true,
description : "The latest news & blog post....",
keywords: "blog, reading, posts"
}
}
}
];
许多爬虫不能很好地与单页应用程序配合使用。您可以将 https://prerender.io/ or https://www.prerender.cloud/. I am using https://www.prerender.cloud/ 之类的预渲染解决方案与 Netlify 一起使用,效果很好。
如果您想继续使用 Firebase 托管,请尽量减少机器人访问页面时调用的代码。不要加载任何库或 运行 任何东西,除了呈现机器人和爬虫所需的标签和数据所必需的东西。示例如下。
index.html
<script>
(function(w,d){
w.myApp = w.myApp || {}; w.myApp.robot = false;
var AM_I_ROBOTS = ['googlebot', 'twitterbot', 'facebookexternalhit', 'google.com/bot.html', 'facebook.com/externalhit_uatext.php', 'tweetmemebot', 'sitebot', 'msnbot', 'robot', 'bot', 'spider', 'crawl'];
var ua = navigator.userAgent.toLowerCase(); w.myApp.userAgent = ua;
for (var i = 0, len = AM_I_ROBOTS.length; i < len; i++) { if(ua.indexOf(AM_I_ROBOTS[i]) !== -1 ) { w.myApp.robot = true; break; }}
})(window,document);
</script>
<script>
if(!window.myApp.robot){
// Google Analytics code
}
</script>
<script>
if(!window.myApp.robot){
// Facebook Connect code
}
</script>
app.component.ts
export class AppComponent implements OnDestroy, OnInit, AfterViewInit {
...
public webRobot: boolean = false;
private static AM_I_ROBOTS:[string] = ['googlebot', 'twitterbot', 'facebookexternalhit', 'google.com/bot.html',
'facebook.com/externalhit_uatext.php', 'tweetmemebot', 'sitebot', 'msnbot', 'robot',
'bot', 'spider', 'crawl'];
...
constructor(private auth: Auth,
private localStorage: LocalStorageService,
private meta: MetaService,
...
private otherService: OtherService,
) {
}
ngOnInit(): void {
this.init();
}
init() {
const robots = AppComponent.AM_I_ROBOTS;
const ua = navigator.userAgent.toLowerCase();
for (var i = 0, len = robots.length; i < len; i++) {
if(ua.indexOf(robots[i]) !== -1 ) {
this.webRobot = true;
break;
}
}
// for service that should be informed to
// run minimally with robots
this.otherService.init(this.webRobot);
// for service that should not be called with robots
if (!this.webRobot) {
this.auth.init();
// etc.
}
}
Angular4自带元服务Angular通用,你可以试试