PS PrestaShop Beginner

DF Glossary — SEO Glossary for PrestaShop 8 & 9

Install and configure the SEO glossary: terms, synonyms, automatic tooltips, indexable definition pages and internal linking to your products.

Updated Module version 1.0.0

Overview

DF Glossary turns your industry vocabulary into an SEO asset. You enter your terms once — with a short definition and a long one — and the module does three things automatically: it injects a link with a tooltip on every occurrence of the term in your product, category and CMS descriptions; it publishes an indexable definition page per term; and it links each definition to the products you associate with it.

The result is a two-way internal link graph that builds itself with no editorial effort: your pages strengthen your definitions, your definitions strengthen your products, and your definitions strengthen each other.

No AI, no API. All processing happens in PHP, server-side. There is no API key to provide, no recurring cost, no catalog data ever leaves your server, and the rendering is fully compatible with full-page caching.

Installation

Requirements

  • PrestaShop 8.0, 8.1, 8.2 or 9.x
  • PHP 7.4 to 8.3
  • MySQL 5.7 / MariaDB 10.3 or later
  • Friendly URLs enabled (Shop Parameters, Traffic and SEO) — required for the glossary pages

Steps

  1. In the back office, go to Modules → Module Manager → Upload a module.
  2. Upload the dfglossary-1.0.0.zip file.
  3. Installation creates four SQL tables, a back office tab and the default configuration keys.
  4. A new Catalog → SEO Glossary tab appears in the menu. That is where you manage your terms.
  5. Click Configure from the Module Manager to reach the global settings.

After installation, check that friendly URLs are enabled. Without them, the glossary pages remain reachable but with technical URLs that are poorly suited to search engines.

Module configuration

The configuration panel is split into three sections.

Activation and injection mode

  • Enable injection — master switch. When off, the module stops enriching your content, but the glossary pages stay online and indexed.
  • Mode — three possible values:
    • Link + tooltip (default): the term becomes a link to its definition page and shows the tooltip on hover. This is the mode that combines the SEO benefit with the conversion benefit.
    • Link only: the term becomes a link, with no tooltip. Choose this if you only care about internal linking.
    • Tooltip only: the term shows the definition on hover without becoming a link. Choose this if you want the pedagogy without adding outbound links to your product pages.

Limits (over-optimisation guardrails)

  • Maximum occurrences per term — 1 by default. Even if a word appears eight times in a description, only the first occurrence becomes a link. We strongly recommend keeping this value: a single link per concept is enough to pass the semantic signal, and the following ones dilute internal PageRank without adding anything.
  • Maximum links per content item — 10 by default, across all terms. Beyond that, the engine stops, whatever terms remain.

Target content

Four independent switches determine where injection applies:

  • Product descriptions — the long description.
  • Include the short description — a separate option. Careful: the short description often appears at the top of the page and in listings; putting links there can be excessive.
  • Category descriptions — description and additional description.
  • CMS pages and CMS categories — CMS page content.

URL base

The URL base field defines the segment under which the glossary pages are published. Default value: glossary, which gives /glossary for the index and /glossary/coated-canvas for a term page. The field is validated as a link rewrite: letters, digits and hyphens only.

If you change the URL base after letting the pages get indexed, every glossary URL changes at once. Plan 301 redirects from the old URLs, or settle the URL base once and for all at installation time.

Managing terms

Go to Catalog → SEO Glossary. The list shows all your terms with their slug, their auto-linking state and their status. You can search, sort, filter, enable or disable in one click, and delete in bulk.

Creating a term

Click Add a term. The form is fully multilingual: every text field is entered language by language.

  • Term — the exact wording matched in your content. Matching is case-insensitive and respects word boundaries.
  • Slug — the identifier in the URL. Leave it empty to have it generated from the name.
  • Synonyms — comma-separated list. Plurals, abbreviations and spelling variants all trigger the same link and the same tooltip.
  • Short definition — this is the tooltip text. Plain text recommended. It is truncated at 180 characters inside the bubble, but shown in full at the top of the definition page.
  • Long definition — rich editor. This is the body of the definition page, and the content that will rank in Google.
  • Meta title / Meta description — optional. Without them, the module falls back automatically on the term name and the short definition.
  • Related products — comma-separated list of product IDs. Their thumbnails will appear on the term page.
  • Auto-linking — individual switch. When off, the term keeps its indexed definition page but is never injected into content.
  • Active — when off, the term disappears from the glossary and its page returns a clean 404.

Editorial best practice

  • Aim for 20 to 50 terms. Volume is not the variable that matters: a term deserves its place if it actually appears in your descriptions and answers a question your customers ask.
  • Write long definitions of 150 to 400 words. Enough to stand as autonomous content in Google’s eyes, short enough to be produced quickly.
  • Associate 2 to 6 products per term, no more. A definition page pointing to twenty products dilutes its authority.
  • Invest in synonyms. This is the lever that multiplies coverage: a catalog written over several years by several people rarely expresses a concept a single way.
  • Do not translate synonyms word for word. Each language has its own variants; enter them independently.

How injection works

Enrichment happens server-side, at page render time, through PrestaShop’s content filtering hooks. Your descriptions are never modified in the database: if you disable the module, your content instantly returns to its original state.

The replacement engine

The content is split into tag segments and text segments. Only text segments are candidates for replacement. The following zones are systematically skipped:

  • existing links (no risk of creating a nested link),
  • h1, h2 and h3 headings,
  • script, style, code, pre, svg and noscript blocks,
  • form fields: textarea, select, option, button,
  • iframes.

On allowed segments, the search uses Unicode word boundaries: it is impossible to turn a fragment inside a word or an identifier into a link. Matching ignores case and tolerates multiple spaces or line breaks. Finally, each injected link is temporarily replaced by a unique token during processing — so a term can never be re-linked inside a link the module has just created itself.

Variant priority order

All variants of a term (main name and synonyms) are merged then sorted by decreasing length. The longest expression always wins. Concretely, if both PVC coated canvas and coated canvas are in your synonyms, the former is the one that gets linked when it appears in full.

The glossary pages

Index page

Available at /glossary, it lists every active term, grouped by letter, with alphabetical navigation and an excerpt per term. It emits a DefinedTermSet JSON-LD block.

Definition page

Available at /glossary/{slug}, each page includes:

  • an H1 title and the highlighted short definition,
  • the long definition in rich format, inside which the other glossary terms are automatically linked in turn (the current term is excluded, so no self-link),
  • thumbnails of the related products,
  • a related-terms cloud,
  • dedicated meta title and meta description, canonical URL, breadcrumb,
  • a DefinedTerm JSON-LD block.

If a slug does not exist or the term is disabled, the page returns a clean 404.

Why this markup matters. DefinedTerm and DefinedTermSet tell the engine not only what the page is about, but what function it fills in the site architecture. In the era of generative answers (AI Overviews, ChatGPT, Perplexity), correctly marked-up definitional content is over-represented in citations.

Multilingual and multistore

Every text field in the glossary is multilingual: name, synonyms, definitions, slug, meta title and meta description can all differ per language. Matching always happens in the current context language: an English description will never be enriched with German terms.

On the multistore side, terms are attached to shops through PrestaShop’s standard association table. You can therefore run a dense technical glossary on a B2B store and a simplified one on a B2C store, within the same installation.

Behaviour on mobile

There is no hover on a touch screen. The module loads a tiny script that handles the tap: the first tap on a term shows the tooltip and blocks navigation, the second tap opens the definition page. Any other open tooltip closes automatically, and a tap outside the term dismisses the bubble.

Performance

The term dictionary is loaded once per request and cached statically: even a category page showing thirty products triggers a single SQL query for the glossary. The replacement itself is a PHP string operation, in the millisecond range. No blocking JavaScript is loaded, no network call is made, and the result is fully compatible with full-page caching.

Troubleshooting

  • Check that the Enable injection master switch is set to Yes.
  • Check that Product descriptions is enabled in the target content.
  • Check that the term is active and that its auto-linking is on.
  • Check that the term is filled in in the language of the page being viewed — a term entered only in French will never be injected into an English description.
  • Clear the PrestaShop cache (Advanced Parameters → Performance).

The term appears in the text but is not linked

Three possible causes. Either the term is already inside a link, an h1–h3 heading or a protected zone — that is the intended behaviour. Or the per-term occurrence limit (1 by default) has already been reached for this content: the following occurrences stay plain text, which is normal. Or the global limit of 10 links per content item has been reached.

The glossary pages return a 404

  • Check that friendly URLs are enabled.
  • Regenerate the .htaccess file (Shop Parameters → Traffic and SEO → Generate the .htaccess file).
  • Check that the term is active and its slug is filled in for the language being viewed.

Tooltips do not show

Check that the mode is not set to Link only. If the mode is correct, clear the cache and check that the module stylesheet is being loaded (it is added automatically on every storefront page).

Uninstalling

Uninstalling removes the module’s four SQL tables, the back office tab and every configuration key. Your terms are therefore permanently lost — export them if you plan to reinstall later. On the other hand, no product, category or CMS description has ever been modified in the database: your content simply returns to its original state, with no cleanup to run.

Known limitations

  • Slug uniqueness is not enforced per language. If two terms share the same slug in the same language, the first one found wins. Check your slugs as you enter them.
  • Protected zones (links, h1–h3 headings, code, form fields) are never enriched. This is a design decision, not a limitation you can work around.
Was this page helpful?

Still stuck? Contact support