Skip to main content
drupalreleases
Release: Cms 2.2.3 — Update released for Drupal core (2.2.3)! Release: Easy Breadcrumb 2.0.11 — Minor update available for module easy_breadcrumb (2.0.11). Release: Bootstrap 8.x-3.42 — Minor update available for theme bootstrap (8.x-3.42). Release: Editoria11y Accessibility Checker 3.0.10 — Minor update available for module editoria11y (3.0.10). Release: Editoria11y Accessibility Checker 2.2.24 — Minor update available for module editoria11y (2.2.24). Release: Leaflet 10.4.13 — Minor update available for module leaflet (10.4.13). Release: Flag 5.1.1 — Minor update available for module flag (5.1.1). Release: MCP Sentinel 2.33.0 — Minor update available for module mcp_sentinel (2.33.0). Module Revived: Bootstrap 8.x-3.41 — Theme bootstrap updated after 6 months of inactivity (8.x-3.41). Security Coverage: Component Library — Module component_library now has official Drupal security advisory coverage.

Fuzzy Term Merge

10 sites No security coverage
View on drupal.org

This module helps administrators find and merge duplicate or near-duplicate taxonomy terms using fuzzy string matching. It identifies potential matches and provides a guided wizard to review and merge them, preventing fragmented content and improving search accuracy.

Finds and cleans up near-duplicate taxonomy terms. Fuzzy string matching surfaces likely duplicates within a vocabulary; a short wizard walks you through reviewing and merging them.

Why

Vocabularies accumulate duplicates over time — "Aluminium" vs "Aluminum", "T-Shirt" vs "Tshirt". They fragment content, break faceted search, and skew reporting. Merging them by hand is slow and error-prone.

What it does

Path-aware matching

Every pair is scored on two axes and blended into one match score:

  • Leaf % — name similarity (similar_text() / levenshtein()).
  • Path % — how much of the two terms' taxonomy ancestry overlaps.

Comparison spans the whole vocabulary, so the same name in two different branches (e.g. "Apple" under Fruit vs Company) is surfaced but flagged with a low path score — the signal that tells a homonym apart from a true duplicate. Each term shows its hierarchy breadcrumb, and the score expands to reveal the leaf/path breakdown.

Safe hierarchy handling on merge

  • Children of a merged-away term are re-parented onto the surviving term — no orphaned subtrees.
  • Optionally, parent terms left empty by the merges (no children, no content references) can be pruned too — opt-in, with a preview of exactly what will be removed.

The rest

  • Three-step wizard: analyse → choose direction per pair → confirm & execute.
  • Configurable similarity threshold and minimum term length; AJAX results, no page reload.
  • Usage counts across all entity-reference fields (nodes, products, paragraphs, media, etc.) to help pick the term to keep.
  • Batch processing for vocabularies of any size.
  • Multilingual, with fallback to the default translation.
  • Drush command (ftm-tfd) for command-line audits.
  • Session-scoped state via PrivateTempStore; no custom schema, no custom permissions.

Requirements

  • Drupal 10 or 11, PHP 8.1+
  • Term Merge 2.x — performs the merge and defines the merge taxonomy terms permission
  • Drush (optional) — only for the ftm-tfd command

Install

Require via Composer, enable alongside Term Merge, and grant merge taxonomy terms to the relevant roles. A Fuzzy merge tab appears on each vocabulary's admin page.

Limitations

  • Merges are permanent — no undo. Back up before running on production.
  • levenshtein() is limited to 255-byte strings (shown as "n/a" beyond that).

Depends on

Dependencies of the latest stable release

No dependencies recorded for this project.

Required by

Tracked projects that depend on this one

No tracked projects depend on this one yet.

Activity

Tracked releases
3
Tracked since
Jul 2026
Latest release
2 months ago
Releases (12 mo)
3 ▲ from 0
Maintenance
Active

Release Timeline

Releases

Version Type Core Release date
1.0.0-alpha3 Pre-release 10–11 Aug 5, 2026
1.0.0-alpha2 Pre-release 10–11 Jul 23, 2026
1.0.0-alpha1 Pre-release 10–11 Jul 1, 2026