markdown - Jekyll 中的 Opengraph 链接预览
问题描述
当您在现代写作网站中插入链接时,它们通常会显示页面预览而不是链接(如果段落中没有周围的文本)。
当我在我的 jekyll 网站上添加一些帖子链接时,我想要同样的体验,这是一种呈现预览的方式。
这对读者来说非常方便。有时预览被错误地称为“嵌入”。
有没有办法在 Jekyll 页面/帖子中根据Open Graph 协议生成带有文本/图像预览的“预览卡” ?
解决方案
在别处显示 Jekyll 站点的富文本预览
有没有办法根据 Open Graph 协议生成带有文本/图像预览的“预览卡”,而不仅仅是静态站点生成器 Jekyll 的降价站点中的普通链接?
是的,这是可能的。jekyll -seo-tag 插件已经为您设置了 Open Graph Protocoll 元数据的属性,正如您在其模板中看到的那样。
Jekyll 的默认主题,
该插件从您那里读取值_config.yaml
以设置属性。有些值是
title
对于og:title
和og:site_name
description
为了og:description
url
为了og:url
也可以按照其文档的高级用法部分og:image
中的说明使用jekyll-seo-tag
插件进行指定。在帖子的开头添加以下内容:
image:
path: /your/fancy/image.png
height: 100
width: 100
也可以指定默认图像,请参阅Jekyll 文档中的前端默认值
我用自己的博客尝试了这一切——也是用 Jekyll 生成的。
我og:image
为这篇文章添加了一个。你可以在GitHub 上查看它的源代码。
在添加图片之前,Telegram 桌面的预览是这样的:
添加后og:image
,它看起来像这样:
如果我的图像没有显示怎么办?
有几个原因。
- 也许你的图像太大了?一些网站建议将预览图像保持在 300 KB 以下
- 您的链接预览已被缓存。Telegram 为此提供了一个很好的解决方案 -
@webpagebot
. 您可以将链接发送到该机器人,它会更新缓存。
在 Jekyll 网站上显示其他链接的预览
有两种方法可以为您的 Jekyll 网站上的链接生成预览:
- 在服务器上生成链接预览
- 让客户端用 JavaScript 生成预览
服务器端预览生成
- 优点:
- 您的客户不需要 JavaScript
- 缺点:
- 预览是随您的网站生成的,并且仅在您的网站更新时更新
- 自定义插件不适用于 GitHub 页面
存在一个 Jekyll 插件 - jekyll-preview-tag
:
首先安装所需的 gem
nokogiri
,open-uri
,ruby-readability
和digest
, 例如bundle add nokogiri bundle add open-uri bundle add ruby-readability bundle add digest
现在下载文件
preview_tag.rb
并将其放在_plugins
您网站的文件夹中。创建
_cache
目录将您的链接添加到您的降价中,例如:
{% preview https://mycoolsite.com %}
默认情况下,这仅呈现文本:
但是,您可以添加一个提取og:image
标签的方法:
def get_og_image_url(source)
if source.css('meta[property="og:image"]').first
return source.css('meta[property="og:image"]').first["content"]
end
return ""
end
我在我的 GitHub 个人资料上创建了一个分支来演示这一点,您可以轻松地对其进行修改。
预览如下所示:
客户端预览生成
有几个可用的 JavaScript 库可以为您生成预览。
- 优点
- 预览始终是最新的
- 缺点
- 客户端需要 JavaScript
- 由于Same-Origin-Policy,大多数工具依赖于外部且通常不免费的服务
你可能想看看
推荐阅读
- elasticsearch - 为什么我的 Elastic Enterprise 搜索配置不起作用?
- wordpress - 为什么所有自定义帖子类型都显示在“最近的帖子”小部件中?
- hana - HANA 中计算列的元数据
- html - 将 Bookdown 构建为 HTML 会丢失样式格式
- mocha.js - 'npm run coverage' 没有更新 lcov.info 文件
- java - Spring 字段验证未绑定在 BindingResult 中
- java - 尝试将 Spring Boot 应用程序与 mongoDB 连接时出错
- angular - Angular canActivate 从服务中获取更新的变量
- php - 想要使用 php 从 Amazon url 检索产品 ID 和附属标签
- android - 返回多个图像的图像选择器