【问题标题】:Dynamic Meta Tags For Social Sharing Angular 6+ Universal用于社交分享的动态元标签 Angular 6+ Universal
【发布时间】:2019-10-21 06:29:46
【问题描述】:

我想这个问题已经被问过太多次了,因为我已经回答了几乎所有可能涉及到这个问题的问题。

简化我的需求:我想为我的网站创建社交分享按钮,该按钮使用 Angular 7 并具有通用的正确设置。

详细信息:我正在寻找一种解决方案,允许我动态更新 Facebook、Twitter 和其他社交媒体平台的元标记,这样当我点击分享按钮时,我应该分享内容这是特定于当前文章的观点。 重要提示:这些元标记的数据是通过API调用获得的,因此解决方案不能包含硬编码数据。

尝试过的解决方案:我尝试了使用“@angular/platform-b​​rowser”中的 Meta 的解决方案,但结果是它在 DOM 已经渲染后更新了标签。

我的组件的 ngOnInit 有以下内容:

this.musicService.getTrackInfo(track._id)
                .subscribe(track => {  
            this.metaService.setTag('og:title', track.name);
            this.metaService.setTag('og:type', 'music.song'); });

研究:

类似的未解决问题:

有人可以为这个问题提供完整的分步解决方案,并解释为什么当前使用 Meta 的方式不起作用。

【问题讨论】:

  • 这里提供的解决方案与大多数解决方案一样。如果您检查,标签会更新,但如果您查看源代码,它们不会更新,因此爬网程序看不到标签
  • 听起来您的通用设置有问题,因为您可以使用 SSR 更改元数据。尝试一个新项目。
  • 我将尝试一个新项目。但是当 DOM 渲染正常时,我的 SSR 怎么会出现问题呢?
  • 可能你的异步请求没有在服务器端正确完成。您说您在更新之前发出 API 请求。我认为这就是问题所在。

标签: angular client-side meta-tags angular-universal server-side-rendering


【解决方案1】:

使用 updateTag 确实对我有用。 在 index.html 中,我添加了所有没有价值的标签,即

<meta name="description" content="">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="">
<meta name="twitter:description" content="">
<meta name="twitter:image" content="">

我还添加了这样的动态值:

this.meta.updateTag({
        name: 'twitter:description', content: *value from api*
      });

【讨论】:

  • 如果您的 Angular 版本 > 5 尝试使用 Angular ssr
  • 在没有角 SSR 的情况下是否可以在角 8 中工作?
猜你喜欢
  • 2018-11-10
  • 2016-07-13
  • 2019-05-21
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多