Angular 4 - 动态更新 Facebook 的元标签(开放图)

2023-12-13

我们如何动态添加/更新元标记,以便 Facebook/Whatsapp 共享对话框选择它们?

我将 Angular 2 应用程序升级到 Angular 4,以便在我们从 API 获取组件中的数据后,使用元服务动态添加/更新元标记。

到目前为止,在我的组件中,我已经

this.metaService.updateTag({ property: 'og:title', content: pageTitle });
this.metaService.updateTag({ property: 'og:url', 'www.domain.com/page' });
this.metaService.updateTag({ property: 'og:image', content: coverUrl, itemprop: 'image' });
this.metaService.updateTag({ property: 'og:image:url', content: coverUrl, itemprop: 'image' });
this.metaService.updateTag({ property: 'og:image:type', content: 'image/png' });

我使用 updateTag 是因为我已经添加了具有默认值的静态标签。当我检查元标记值时,此代码成功更新了它们。

我知道 Facebook/Whatsapp 调试器工具不执行任何 javascript,因此它可能永远不会在其环境中执行,这是有道理的。

我在用着https://developers.facebook.com/tools/debug/它总是选择有意义的默认标签值。

我的问题是,如何让 Facebook/Whatsapp 动态获取更新的标签值?我正在使用 Angular 4 并通过 API 调用加载所有数据,因此在页面加载和脚本执行之前不可能获取任何类型的数据。


Open Graph OG 标签必须位于源代码内!

您需要提供一个静态 html 页面,其中包含 html 源代码中的 og:image og:title 和 og:description 等开放图形标签,因为 facebook、twitter 和 co 只是抓取纯 html,而不通过 javascript 渲染它。 Angular通过js动态更新dom,因此爬虫只获取初始的index.html。

有多种方法可以提供包含开放图的 html 标签并解决您的问题:

  • 具有角度通用的服务器端渲染
  • 使用代理渲染您的页面
  • 动态覆盖 index.html 替换 og 标签
  • 提供静态 html 页面(不确定 Angular 是否支持)

我猜你已经使用过类似的东西ngx-meta添加og标签?

Angular Universal - 在 Angular 2/3/4/5 中使用元标记进行服务器端渲染

我认为服务器端渲染是解决您的问题的最合适方法。为此,您可以托管节点服务器或使用例如。 AWS Lambda。这样做的缺点是,您的应用程序必须主动托管,并且不能再静态提供服务。无论如何,这似乎是最好的方法,因为它也改善了搜索引擎优化。 Angular Universal 是要搜索的术语:

  • 角度通用
  • Angular 通用入门样板
  • Angular Universal PWA,具有服务器端渲染无服务器和 aws lambda 样板

构建时的 Angular 通用预渲染

您还可以在构建过程中预渲染特定的路由,并将 Angular 作为具有多个预渲染的 index.html 文件的静态应用程序提供服务。如果您只有很少的静态路由,则效果非常好。考虑具有动态部分的更通用的路线,这不是解决方案。进行服务器端渲染。这角度通用样板还包含一个示例。看预渲染.ts

替代解决方案

使用代理预渲染 Angular 以提供 OG 标签

如果您想避免在构建过程中实现服务器端/预渲染(对于结构不佳的应用程序来说,设置角度通用有时会很痛苦。)您可以尝试使用代理服务预渲染页面。看看例如。预渲染io.

覆盖index.html

将所有请求重定向到覆盖 og:tags 的脚本。例如。使用PHP和.htaccess覆盖og标签这在现代环境中也是可能的。例如。您可以使用 cloudfront / api 网关和 lambda 函数。不过还没有看到这方面的例子。

Facebook 缓存和开放图调试

请注意,缓存可能仍然缓存了第一次抓取的开放图信息。确保您的源代码是最新的,并且清除所有缓存、反向代理(例如 nginxx、cloudfront)。

Use Facebook 调试器调试开放图缓存并清除 facebook 打开图缓存

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

Angular 4 - 动态更新 Facebook 的元标签(开放图) 的相关文章

随机推荐

  • 在 Azure AD B2C 中使用状态参数容易遭受开放重定向漏洞吗?

    如果我使用State参数来控制RedirectURI如此处所述 为什么重定向 URL 在 Azure AD B2C 中是完全限定的 我不会容易受到打开重定向漏洞 我不是刚刚把问题从RedirectURI to the State范围 状态参
  • 将未初始化的变量传递给 srand 是个好主意吗?

    将未初始化的变量传递给是个好主意吗srand而不是结果time NULL 这是一个 include并减少一个函数调用 示例代码 include
  • mysqli_error() 需要 1 个参数,0 个给出[重复]

    这个问题在这里已经有答案了 我正在尝试了解 mysql 有人能告诉我为什么这个 mysql 查询不起作用吗 我收到以下错误 警告 mysqli error 需要 正好 1 个参数 0 给出 home freebet2 public html
  • SolrJ:禁用自动提交

    我们有一个 Solr 实例 我们发现在 solrconfig xml 中打开 autoCommit 实际上可以很好地满足我们的需求 但是 在某些实例和某些批处理操作中 我们希望暂时禁用自动提交 我找不到任何东西 但我想知道是否有人知道是否可
  • 如何将 Leaflet 地图嵌入到 Reveal.js 演示文稿中?

    我正在尝试创建一个在 Reveal js 之上运行的演示文稿 其中一张幻灯片中包含一个 Leaflet js 地图 我已将所有必需的 Javascript 和 CSS 文件包含到我的 Reveal js 演示文稿中 并且可以使地图显示在幻灯
  • React-native,动态渲染按钮点击

    我想动态生成一个按钮单击TouchableOpacity在反应本机中 我没有找到任何相关内容 我想要的只是从函数中调用 TouchableOpacity onPress 或查看其对按钮的效果 在钛合金中 我们正在做 button click
  • 无法在 docker 上执行 nvidia 运行时

    我正在尝试让 nvidia docker 在我的 centos7 系统上运行 cat etc systemd system docker service d override conf Service ExecStart ExecStart
  • 将通知链接到闪亮仪表板中的选项卡

    我想将通知链接到 内部 选项卡 为此 我遇到了这个 如何在闪亮的notificationItem中使用href 这似乎在加载应用程序后立即起作用 但在侧边栏中进行一些导航后 链接不再起作用 ui R library shiny librar
  • 如何在java中安全地存储加密密钥? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一个 java 属性对象 其中包含 Web 服务的身份验证信息 我需要加密该数据 但我不知道需要在哪里存储加密密钥才能保证其安全 加密这些数据并以安全的方式检索它的最佳实践是
  • 从 AngularJS 指令访问属性

    我的 AngularJS 模板包含一些自定义 HTML 语法 例如
  • 如何在 Django REST 框架的可浏览 API 中编辑图标?

    我需要编辑可浏览 API 的图标 是否可以通过覆盖模板中的 api html 来做到这一点 这可以通过在 api html 中添加以下块来实现 block style block super endblock
  • Swift 3 尝试呈现谁的视图不在窗口层次结构中

    这个问题已被问过很多次 但即使在尝试了大多数可能的事情之后 我仍然无法找到适合我的解决方案 这是错误消息 警告 尝试在 上显示其视图不在窗口层次结构中的内容 注意 我没有使用任何导航控制器 我只是以模态方式呈现一个视图控制器我上面有一个用于
  • C 和 C++ 中的标准头文件列表

    在哪里可以找到 C 和 C 中所有头文件的列表 当我构建库时 我收到类似 tree h not found 我想这是 C 和 C 中的标准头文件 这引起了我想了解所有头文件及其贡献的好奇心 有地方可以找吗 我正在 Solaris Unix
  • 完成后将变量保存在 .awk 文件中以供下次运行

    因此 我有一个 awk 文件 它将一个订单文件拆分为多个订单文件 文件名从orders xml 包含100个订单的主文件 到递增的文件 如order 1 xml order 2 xml order 3 xml等 当 awk文件完成文件分割后
  • 用于添加到收藏夹的精灵或类似效果

    我有一个 iPhone 应用程序 其中包含 全部 和 收藏夹 选项卡 其中包含标准主细节布局 在 全部 选项卡上 用户可以选择 添加到收藏夹 我正在寻找一个好的视觉队列来向用户表明这样做后可以从 收藏夹 选项卡访问该项目 是否存在类似 精灵
  • Asp.net WebApi 中的自定义授权 - 一团糟?

    我正在阅读有关 Web Api 授权的多个资源 书籍和一些答案 假设我想添加仅允许某些用户访问的自定义属性 Case 1 我见过这种方法压倒性的 OnAuthorization 如果出现问题 它会设置响应 public class Allo
  • PyQt5:使用QThread弹出进度条

    我怎样才能实现进度条 in a 弹出窗口它通过所谓的 Worker 类 即消耗时间 CPU 的任务 监视正在运行的函数的进度QThread 我已经检查了无数的示例和教程 但进度条显示在弹出窗口中的事实似乎让一切变得更加困难 我相信我想要的是
  • FineUploader onProgress() 回调不适用于 Android

    Fine Uploader 的 onProgress 回调在 Android 设备上不起作用 这是我的代码 onProgress function id fileName loaded total alert debug this aler
  • 在Python中使用Win32api获取鼠标滚轮滚动

    我想读取鼠标滚轮滚动事件然后模拟它们 我知道我可以使用下面的代码来模拟它 Scroll one up win32api mouse event MOUSEEVENTF WHEEL x y 1 0 Scroll one down win32a
  • Angular 4 - 动态更新 Facebook 的元标签(开放图)

    我们如何动态添加 更新元标记 以便 Facebook Whatsapp 共享对话框选择它们 我将 Angular 2 应用程序升级到 Angular 4 以便在我们从 API 获取组件中的数据后 使用元服务动态添加 更新元标记 到目前为止