From b5b756e7e9d35c8f3061e63b79bb7f30a8dcfc25 Mon Sep 17 00:00:00 2001 From: Shizuo Fujita Date: Tue, 6 Oct 2026 12:29:21 +0900 Subject: [PATCH] Add Open Graph and X card meta tags to blog articles Blog articles get og:type article, a canonical og:url, a summary generated from the body, their date and tags, and the Fluentd logo as the card image. Other pages keep only og:title and twitter:title. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Shizuo Fujita --- config.rb | 3 ++ lib/ogp.rb | 74 ++++++++++++++++++++++++++++++ public/images/ogp/default.png | Bin 0 -> 20627 bytes source/layouts/layout.erb | 3 +- source/layouts/minimal_layout.erb | 3 +- 5 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 lib/ogp.rb create mode 100644 public/images/ogp/default.png diff --git a/config.rb b/config.rb index 43b5f59f..b5e5f483 100644 --- a/config.rb +++ b/config.rb @@ -20,6 +20,9 @@ # For fluentd.org set :http_prefix, '/' +require_relative "lib/ogp" +helpers OGP::Helpers + helpers do def is_certified(plugin) certified_plugins = YAML.load_file('data/certified_plugins.yml') diff --git a/lib/ogp.rb b/lib/ogp.rb new file mode 100644 index 00000000..879eb6b2 --- /dev/null +++ b/lib/ogp.rb @@ -0,0 +1,74 @@ +require "erb" +require "nokogiri" + +module OGP + SITE_NAME = "Fluentd" + LOCALE = "en_US" + TWITTER_SITE = "@fluentd" + DEFAULT_TITLE = "Fluentd | Open Source Data Collector" + IMAGE = "/images/ogp/default.png" + IMAGE_WIDTH = 438 + IMAGE_HEIGHT = 438 + IMAGE_ALT = "Fluentd logo" + DESCRIPTION_LENGTH = 200 + GREETING = /\A(?:hi|hello)\b[^.!?]{0,40}[!,.]?\z/i + + module_function + + def description_from_html(html, length = DESCRIPTION_LENGTH) + fragment = Nokogiri::HTML::DocumentFragment.parse(html) + fragment.css("pre, table, h1, h2, h3, h4, h5, h6, img, script, style").remove + blocks = fragment.children.map { |node| node.text.gsub(/\s+/, " ").strip }.reject(&:empty?) + blocks.shift while blocks.first&.match?(GREETING) + truncate(blocks.join(" "), length) + end + + def truncate(text, length) + return text if text.length <= length + + cut = text[0, length - 1] + cut = cut.sub(/\s+\S*\z/, "") unless text[length - 1].match?(/\s/) + cut.sub(/[\s,;:]+\z/, "") + "…" + end + + def meta_tag(attribute, key, value) + %() + end + + module Helpers + def ogp_meta_tags + article = current_page.locals[:article] + url_root = config[:url_root] + + page_title = current_page.data.title.to_s.strip + title = page_title.empty? ? OGP::DEFAULT_TITLE : "#{page_title} | #{OGP::SITE_NAME}" + + tags = [] + if article + description = OGP.description_from_html(article[:content]) + tags << [:name, "description", description] + tags << [:property, "og:site_name", OGP::SITE_NAME] + tags << [:property, "og:locale", OGP::LOCALE] + tags << [:property, "og:type", "article"] + tags << [:property, "og:title", title] + tags << [:property, "og:description", description] + tags << [:property, "og:url", "#{url_root}/blog/#{article[:url]}/"] + tags << [:property, "og:image", url_root + OGP::IMAGE] + tags << [:property, "og:image:width", OGP::IMAGE_WIDTH] + tags << [:property, "og:image:height", OGP::IMAGE_HEIGHT] + tags << [:property, "og:image:alt", OGP::IMAGE_ALT] + tags << [:property, "article:published_time", article[:date].iso8601] + article[:tags].each { |tag| tags << [:property, "article:tag", tag] } + tags << [:name, "twitter:card", "summary"] + tags << [:name, "twitter:site", OGP::TWITTER_SITE] + tags << [:name, "twitter:title", title] + tags << [:name, "twitter:image:alt", OGP::IMAGE_ALT] + else + tags << [:property, "og:title", title] + tags << [:name, "twitter:title", title] + end + + tags.map { |attribute, key, value| OGP.meta_tag(attribute, key, value) }.join("\n") + end + end +end diff --git a/public/images/ogp/default.png b/public/images/ogp/default.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad8ca03d54859ccfae1407ea665d9760d194864 GIT binary patch literal 20627 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 C@?uQ@ literal 0 HcmV?d00001 diff --git a/source/layouts/layout.erb b/source/layouts/layout.erb index 02c67347..5f99f90f 100644 --- a/source/layouts/layout.erb +++ b/source/layouts/layout.erb @@ -49,8 +49,7 @@ <%= (current_page.data.title.nil? or current_page.data.title.empty?) ? "Fluentd | Open Source Data Collector | Unified Logging Layer" : "#{current_page.data.title} | Fluentd" %> - "> - "> + <%= ogp_meta_tags %> <%= stylesheet_link_tag "bootstrap/bootstrap.min" %> diff --git a/source/layouts/minimal_layout.erb b/source/layouts/minimal_layout.erb index 373b59a9..5fc5adc0 100644 --- a/source/layouts/minimal_layout.erb +++ b/source/layouts/minimal_layout.erb @@ -18,8 +18,7 @@ <%= (current_page.data.title.nil? or current_page.data.title.empty?) ? "Fluentd | Open Source Data Collector | Unified Logging Layer" : "#{current_page.data.title} | Fluentd" %> - "> - "> + <%= ogp_meta_tags %> <%= stylesheet_link_tag "bootstrap/bootstrap.min" %>