我将 ng2-metadata 与我的 Angular 版本 4 应用程序一起使用,谷歌似乎只显示默认标题和描述

2023-12-19

我在用着ng2-元数据使用我的角度应用程序和谷歌似乎只显示默认标题和元描述。

My tech:Angular 版本 4、webpack、typescript 和 firebase 用于托管。

我正在部署 AOT 构建,并且添加了 ng2-metadata aot 函数,如下面的链接所示。

这是我正在使用的包: https://www.npmjs.com/package/ng2-metadata https://www.npmjs.com/package/ng2-metadata

当前的问题:

该代码似乎在浏览器中直观地工作,但谷歌机器人似乎没有在谷歌搜索结果中显示其他页面标题和元标记。

*我已经完成了网站管理员工具抓取请求来索引页面,即使它是 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/ https://prerender.io/ or https://www.prerender.cloud/ https://www.prerender.cloud/。我在用https://www.prerender.cloud/ https://www.prerender.cloud/与 Netlify 一起使用,效果很好。

如果您想继续使用 Firebase Hosting,请尝试尽量减少机器人访问页面时调用的代码。不要加载任何库或运行任何需要渲染机器人和爬虫所需的标签和数据的东西。下面的例子。

索引.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>

应用程序组件.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.

    }
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我将 ng2-metadata 与我的 Angular 版本 4 应用程序一起使用,谷歌似乎只显示默认标题和描述 的相关文章

  • 有没有办法扩展 angular.json 中的配置?

    在构建 Angular 6 应用程序时 我需要同时指定两件事 如果是生产或开发版本 我正在使用的区域设置 In my angular json I have build configurations production fileRepla
  • Ionic2 应用程序中的 API url 等设置保存在哪里? [复制]

    这个问题在这里已经有答案了 我有几个设置应该位于配置文件中 例如 API 的 URL Ionic 2 中最适合它的地方在哪里 From Angular 2 4 文档 https angular io docs ts latest guide
  • 具有多个 Angular 2 应用程序的 ASP.Net Core MVC [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试为一个我知道会变得越来越复杂的项目准备结构 我想使用 ASP Net Core MVC 进行顶层导航 我想在每个主视图中放置
  • 需要在 Visual Studio 2017 中验证 Angular4 和 Angular2

    我已将源代码从 Angularjs 2 升级到 Angularjs 4 我正在使用 Visual Studio 2017 和 ASP NET MVC Core 我现在想验证我使用的是更新版本 4 还是以前的版本 2 这是我的 package
  • Angular2 命名路由

    我用的是Angular2Webpack 入门 https github com AngularClass angular2 webpack starter in 这个最新版本 https github com AngularClass an
  • 如何在全局配置文件中配置 ngx-logger 的记录器级别

    我最近包括了ngx logger对于我在应用程序中实现记录器级别的项目 我已将记录器级别硬编码为app module ts在配置内ngx logger但我需要在一些全局配置文件中实现这一点 我遵循了教程here https medium c
  • 从 Angular 11 升级到 Angular 12 后,我的项目未使用优化参数进行编译

    我刚刚升级了环境nrwl https nrwl io 从 Angular 版本 11 到 12 带有两个 Angular 应用程序和多个库 更新后 当我尝试使用优化设置进行编译时 角度 json optimization scripts t
  • Breeze.js 与 WCF 数据服务

    我刚刚开始探索 js 库 breeze js 我查看了示例 但似乎找不到任何有关如何使用 WCF 数据服务的示例 所有示例似乎都在 Web API 上 有谁知道如何通过 Breeze js 使用 WCF 数据服务 或任何其他 OData 服
  • Angular 5 中 Observable.ForkJoin 的重复 Http 请求

    我有一个 Angular 5 应用程序 组件中包含以下代码 ngOnInit Observable forkJoin this highlightedInsight this insightService getHighlightedIns
  • patchValue 与 {emitEvent: false } 触发 Angular 4 formgroup 上的 valueChanges

    我有一个表单构建器组 正在监听 valueChanges 的更改并触发保存函数 然后触发表单上的刷新函数 this ticketForm valueChanges debounceTime 1000 distinctUntilChanged
  • Angular 2根据管道结果添加样式

    我不确定这是否可能 span class nav label second level text style margin left 10px partner name span class badge unreadConversation
  • Angular 2在两个组件之间传递数据

    我想在两个组件之间传递数据 但我的问题是 我有两个组件 假设一个是 主 另一个是 模态对话框 在我的主要部分中 我想打开模态对话框并从模态对话框中获取数据 而无需离开我的主要组件 我知道如何使用 Input 但我看不到在我的应用程序中使用它
  • 角度2多次错误TS2300:重复的标识符

    系统配置 ubuntu 14 04 节点 v gt v5 6 0 npm v gt 3 7 1 打字最新版本 不知道如何获取版本详细信息 第一次使用 angular2 时 我的文件夹样本 服务器结构如下 server js server t
  • 该命令只能在 CLI 项目内部运行

    由于某些原因 我想使用Angular v5如果我运行以下命令 它会在其中构建一个应用程序angular 6这是我不想要的 ng new hello this creates angular app in the latest version
  • 在 Angular 4 中显示订阅数据

    我需要帮助来显示 Angular 4 中 api 订阅的输出 既然我写了 data data data 但它说类型对象上不存在属性数据 我该怎么做呢 我如何在浏览器中输出它 下面是我的代码和api图片 import Component On
  • Angular 应用程序在 IE 中为空页面,但在 Chrome 中工作

    我已经开始学习了Angular 4并使用编写了一个默认应用程序Angular CLI NG New HelloWorld 当我写的时候ng serve 然后浏览至http localhost 4200 页面加载正常Chrome 然而在IE
  • 解析器中的链相关可观察量

    我有一个解析器 需要在加载页面之前从两个依赖的 API 获取数据 第二个调用是由第一个调用的结果定义的 因此我尝试链接两个可观察量 并且需要在解析器末尾返回第二个可观察量 在我尝试链接可观察量之前 我有 resolve route Acti
  • 如何在 Angular 2 项目中使用 Bower 组件

    我是 Angular 2 的初学者 Angular 2 项目使用 npm 包 我们可以通过简单地导入来在 Angular 2 项目中使用它们 如下所示 import FormsModule from angular forms 另外 我们可
  • Angular2 本地组件/模板重用

    我正在编写一些 Angular2 模板 这些模板具有不同容器的重复部分 在这种情况下 如果对事物进行分组并且启用了多部分模式 则视图可能会发生变化 请原谅这个很长的例子 但是像这样
  • 在 Angular 上开发时无法自动完成和自动导入

    我已经在 Windows 上安装了最新的 VSCode 然后我安装了 languaje 对 TypeScript 的支持 最后 设置一些编辑器选项并安装一些扩展 编辑器配置 editor fontSize 12 editor minimap

随机推荐

  • Visual C 内联汇编器中的立即调用/jmp

    当我尝试立即调用或跳转 VC 2010 内联汇编器时 asm call 00405B90h jmp 00405B90h jmp far 00405B90h 它会产生一个错误 C2415 improper operand type 这可能吗
  • $(window).hashchange() 不起作用

    Hi 我正在尝试使用浏览器后退按钮 我了解如何使用 hashchange 插件捕获事件 gt window hashchange function alert location hash window hashchange 当我尝试加载新页
  • dplyr sql 连接

    考虑以下 SQL SELECT D product name FROM business payment P LEFT JOIN dim product name D ON D product id P product id 该查询返回付款
  • 如何在 VB.NET 中激活、移动窗口并调整窗口大小

    我有一个窗口 我只知道其标题 例如记事本 我需要激活该窗口 调整其大小并将其放置在屏幕的左上角 因此 在对 MSDN 和论坛进行一些研究后 我发现了一些应该实现此目的的功能 我使用FindWindow按标题获取句柄 然后使用GetWindo
  • “复杂胜于复杂”是什么意思? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在蒂姆 彼得斯 Tim Peters 的 Python 之禅 中 复杂胜于复杂 这句话让我很困惑 谁能
  • 在java中使用什么好的持久集合框架?

    我所说的持久集合是指类似于 clojure 中的集合 例如 我有一个包含元素 a b c 的列表 对于普通列表 如果我添加 d 我的原始列表将包含 a b c d 作为其元素 对于持久列表 当我调用 list add d 时 我会返回一个新
  • 弹出到应用程序委托中的根视图控制器

    我有一个有人登录的应用程序 如果他们在将其发送到后台超过 10 分钟后启动它 我会弹出一个漂亮的小 会话过期 警报 并将它们发送到根视图控制器 登录页面 一切都很好 但我不知道如何从应用程序委托的 applicationWillEnterF
  • 如何使用 Amazon S3 实施 LuceneNet

    我尝试在我的应用程序中使用 Amazon S3 来存储我生成的索引来实现 Lucene 但我可以找到任何代码示例或清晰的文章 因此 任何有这方面经验的人请提供指南或可以帮助我开始的东西 有一个类似的问题here https stackove
  • psql:致命:无法打开文件“base/11951/11717”:只读文件系统

    我正在尝试从 CLI 访问 postgreSQL 数据库 当我以 postgres 身份登录并输入命令时 我收到错误 psql FATAL could not open file base 11951 11717 Read only fil
  • PHP 中的单元测试 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 你们用 PHP 进行单元测试吗 我不
  • Angular Material sidenav 事件广播

    我正在使用 Angular Material 的 sidenav 指令 当我们点击组件之外时 sidenav 将被关闭 当时播出的活动是什么 In your controller use watch https docs angularjs
  • 如何检测用户使用的是移动设备、平板电脑还是桌面设备并重定向它们?

    首先我知道响应式网站不是 1 但不幸的是目前这不是一个选择 我也有很强的 JavaScript 编码能力 我需要检测用户是否使用台式机 平板电脑或移动设备并重定向它们 用户使用桌面 留在站点 A 用户使用平板电脑 从 A 重定向到站点 B
  • Typescript 如何将类型键映射到驼峰命名法

    我是打字稿新手 但我想创建一个映射类型来将键从另一种类型转换 具体来说 假设我有一个所有键都是蛇形外壳的类型 我如何创建一个所有键都是驼形外壳的类型 我想我可以做类似的事情 type CamelCase
  • 如何在 Firefox 插件中实现 Chrome 扩展程序的 chrome.tabs.sendMessage API

    我正在使用 Addon Builder 进行 Firefox 插件开发 我不知道如何在 Firefox 插件中实现 Chrome 扩展的 chrome tabs sendMessage API 代码是这样的 代码在background js
  • PowerShell 中的 Word.Application ComObject 错误

    我无法获取 Word 2010 14 0 x 文档SaveAs http msdn microsoft com en us LIBRary microsoft office interop word documentclass saveas
  • 如何使用 PrintDocument 在热敏打印机上打印文本文件?

    我正在使用 C 和 Winforms 创建一个应用程序 现在我需要在热敏打印机上打印销售收据 为此 我创建一个文本文件并使用以下命令读取它以进行打印PrintDocument但我不能这样做 因为我不知道如何配置纸张尺寸 在纸张上对齐文本中心
  • 禁用 wpftoolkit 图表数据点

    有谁知道如何关闭 WPFToolkit 图表中 noraml LineSeries 的数据点 我发现它们非常烦人 对我的目的没有用 但我在类本身上找不到简单的属性或类似的东西 你想隐藏它们吗 如果设置为空是可以的ControlTemplat
  • 如何在aspx页面的服务器脚本块中使用[WebMethod]?

    我正在尝试创建一个简单的 Net 3 5 页面 其中包含一些 HTML 和一个WebMethod 当我尝试打电话给我的WebMethod从我的浏览器 但它不断返回页面 有什么想法如何让它发挥作用吗 这是我的代码
  • 我可以为 influxdb 中的不同测量创建不同的保留策略吗?

    是否可以使用不同的保留策略来处理 influxdb 中的不同测量值 这对于 InfluxDB 来说是完全可能的 为此 您需要创建一个具有两个保留策略的数据库 然后将数据写入关联的保留策略 Example influx gt create d
  • 我将 ng2-metadata 与我的 Angular 版本 4 应用程序一起使用,谷歌似乎只显示默认标题和描述

    我在用着ng2 元数据使用我的角度应用程序和谷歌似乎只显示默认标题和元描述 My tech Angular 版本 4 webpack typescript 和 firebase 用于托管 我正在部署 AOT 构建 并且添加了 ng2 met