用于社交共享的动态元标记 Angular 6+ 通用

Dynamic Meta Tags For Social Sharing Angular 6+ Universal

提问人:Tatenda 提问时间:6/6/2019 更新时间:6/19/2019 访问量:3425

问:

我想这个问题被问了太多次了,因为我几乎已经经历了所有可能的问题。

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

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

尝试过的解决方案:我尝试了从“@angular/platform-browser”使用 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 的方式不起作用。

Angular 客户端 元标记 angular-universal 服务器端渲染

评论

0赞 AT82 6/6/2019
你看过这个吗?stackoverflow.com/questions/35842315/......
0赞 Tatenda 6/6/2019
此处提供的解决方案与大多数解决方案一样。如果您检查,标签会更新,但如果您查看源代码,它们不会更新,因此爬网程序看不到这些标签
0赞 Reactgular 6/6/2019
听起来您的通用设置有问题,因为您可以使用 SSR 更改元数据。尝试一个新项目。
0赞 Tatenda 6/6/2019
我将尝试一个新项目。但是,当 DOM 渲染正常时,我的 SSR 怎么会有问题呢?
0赞 Reactgular 6/6/2019
也许您的异步请求未在服务器端正确完成。您说您在更新之前发出了 API 请求。我认为这就是问题所在。

答:

0赞 Jon Jansson 6/19/2019 #1

它确实对我有用 updateTag. 在索引.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*
      });

评论

0赞 GURURAJ DHARANI 9/6/2019
如果您的 angular 版本> 5,请尝试使用 angular ssr
0赞 Basil Jacob 5/4/2021
它是否在没有角度 SSR 的情况下在 angular 8 中工作?