DinkyTags
- Version: 1.1.1
- Toolicon (SVG):
- Tagline: Adds Open Graph & Twitter Card tags, so shared links preview properly.
- Released: Yes
Open Graph and Twitter Card meta tags are what a shared link turns into on Facebook, LinkedIn, X, WhatsApp, Slack, Signal, Discord or Mastodon: the title, description and image a reader sees before they even click through. Joomla core has grown fairly good at structured data over the years, but it stops there: articles, categories and the home page get no og:* or twitter:* meta at all, so a shared link falls back to whatever the site's logo happens to be. Here comes DinkyTags, providing a small, dependency-free system plugin that builds correct, complete Open Graph and Twitter Card tags on its own.

Features:
- Emit Open Graph and Twitter Card tags for single articles, category views, the home page, and any other frontend page.
- Resolves the share image from the article's own images, a custom field, an inline image, the category, or a site-wide default. In that order.
- Give the home page its own image, different from the site default.
- Build the description from the article's meta description or its intro text, cut cleanly to a chosen length.
- Add publish and modified dates, section, tags and author for articles.
- Add a Twitter Card that switches automatically between a large-image and a plain layout depending on the image's width.
- Follow the site's language for og:locale, or set one explicitly.
- Reuse the page's own canonical link when present, and strip tracking parameters from the shared URL.
- Leave tags already set by another extension alone, or overwrite them.
- Skip chosen components or menu items entirely. Useful for an events extension that already sets its own sharing tags.
Download of latest module version: Dinky Tags version 1.1.1 (zip)
Source code to be found at GitHub project dinkytags.
1.0.0 11 September 2026 Initial release of this plugin. current
Initial release of this plugin.
1.1.0 11 September 2026 Minor Update. Added An on/off switch in front of each of the two defaulted text. Changed override_mode=only-if-missing now also guards og:site_name and og:locale (not just og:title / og:description / og:image): if another extension has already set either override_mode=only-if-missing also detects og:* that another extension emitted as a raw custom <meta> via Document::addCustomTag() (a component view Context detection checks the com_content view before the home-menu check, so an article or category reached without its own menu item is no longer misclassified as home (it inherits the site's default Itemid). id lookups pass an explicit 0 default to Input::getInt(). Config form polish: description_source is a select (its long labels no longer wrap); all yes/no switchers list No before Yes; override_mode is shown as an "Overwrite existing tags" toggle (stored values unchanged); clearer labels for "Overwrite existing tags", "Menu items to skip" and og:locale; the custom <fieldset> label attributes were dropped. Fixed og:locale (auto): a language tag with a script subtag (zh-Hans-CN) produced the invalid zh_Hans_CN; it is normalised to language_TERRITORY (zh_CN). Two-segment tags are unchanged (de-DE → de_DE). twitter:card reads a kept extension's own og:image:width (when it published one next to its og:image) instead of always assuming an unknown width. Helper\Text::excerpt() drops <script> / <style> blocks (content included) before strip_tags(), which would otherwise leave their text in the excerpt. Helper\ArticleLoader logs a caught data-access failure to the plg_system_dinkytags log category (silent unless a logger is configured) so a real DB problem is not completely invisible.
Minor Update.
Added
- An on/off switch in front of each of the two defaulted text.
Changed
- override_mode=only-if-missing now also guards og:site_name and og:locale (not just og:title / og:description / og:image): if another extension has already set either
- override_mode=only-if-missing also detects og:* that another extension emitted as a raw custom <meta> via Document::addCustomTag() (a component view
- Context detection checks the com_content view before the home-menu check, so an article or category reached without its own menu item is no longer misclassified as home (it inherits the site's default Itemid). id lookups pass an explicit 0 default to Input::getInt().
- Config form polish: description_source is a select (its long labels no longer wrap); all yes/no switchers list No before Yes; override_mode is shown as an "Overwrite existing tags" toggle (stored values unchanged); clearer labels for "Overwrite existing tags", "Menu items to skip" and og:locale; the custom <fieldset> label attributes were dropped.
Fixed
- og:locale (auto): a language tag with a script subtag (zh-Hans-CN) produced the invalid zh_Hans_CN; it is normalised to language_TERRITORY (zh_CN). Two-segment tags are unchanged (de-DE → de_DE).
- twitter:card reads a kept extension's own og:image:width (when it published one next to its og:image) instead of always assuming an unknown width.
- Helper\Text::excerpt() drops <script> / <style> blocks (content included) before strip_tags(), which would otherwise leave their text in the excerpt.
- Helper\ArticleLoader logs a caught data-access failure to the plg_system_dinkytags log category (silent unless a logger is configured) so a real DB problem is not completely invisible.
1.1.1 11 September 2026 Patch release. Fixed override_mode=only-if-missing did not recognise a raw custom <meta property="og:site_name"> (or any og:* key containing an underscore, such as og:image:secure_url): the property pattern stopped at _, so DinkyTags still wrote its own tag and the page ended up with two. The pattern now accepts digits, underscores, dots and hyphens. Added Unit tests for the custom-tag parser (MetaWriter::parseCustomOpenGraph()).
Patch release.
Fixed
- override_mode=only-if-missing did not recognise a raw custom <meta property="og:site_name"> (or any og:* key containing an underscore, such as og:image:secure_url): the property pattern stopped at _, so DinkyTags still wrote its own tag and the page ended up with two. The pattern now accepts digits, underscores, dots and hyphens.
Added
- Unit tests for the custom-tag parser (MetaWriter::parseCustomOpenGraph()).