Chat on WhatsApp

Crosslinks — Auto Internal Linking for Magento 2

Automatic internal linking for Magento 2. Pick a keyword, pick a destination (a URL, a product by SKU, or a category by ID), and the module injects a safe anchor tag into every matching product, category, and CMS description at render ti…

Magento 2.4.6–2.4.8 PHP 8.1–8.4 Hyva + Luma Ready Free

Key Features:

  • Built for Magento 2
  • MEQP Compliant
  • Hyva + Luma Ready
  • Free Forever

Additional Services

$0.00
In stock
SKU
panth-crosslinks
Links
Lifetime Updates Every Magento release
1-Year Free Support Email + WhatsApp
Adobe-Certified Magento 2 Developer
Free Forever No subscription, no upsell
What you get

Everything in the box

Built-in from day one. No add-ons, no upsell, no licence keys to renew.

Built for Magento 2

Automatic internal linking for Magento 2.

MEQP Compliant

Adobe Magento Extension Quality Program — passes with zero severity-10 violations.

Hyva + Luma Ready

Vanilla JS, no jQuery dependency. Drop-in compatible with both default Luma and Hyva themes.

Free Forever

Lifetime updates with every Magento release. No subscription, no licence keys, no upsells.

Crosslinks — Automatic Internal Linking for Magento 2 (Hyva + Luma). Turn keywords in Magento 2 product, category, and CMS content into internal anchor links automatically. Admin grid for keyword-to-URL rules, reference by custom URL / product SKU / category ID, per-page and per-keyword limits, time-based activation, excluded-tag safety, nofollow support. Works identically on Hyva and Luma. Extracted from Panth_AdvancedSEO for standalone installation.

What it doesTurn keywords in Magento 2 product, category, and CMS content into internal anchor links automatically.
🎯Best forStores chasing top-of-funnel organic traffic and AEO/GEO visibility
CompatibilityMagento 2.4.4 – 2.4.8 · PHP 8.1 – 8.4 · Hyva + Luma
🔓LicenseFree forever · No subscription · MIT-style open source

Engineered for magento 2 internal linking, magento 2 crosslinks, magento auto internal links — ships with sensible defaults, full admin controls, and zero JavaScript bloat. Works identically on Hyva and Luma; passes Adobe MEQP with zero severity-10 violations.

magento 2 internal linkingmagento 2 crosslinksmagento auto internal linksmagento keyword linksmagento 2 anchor injectionmagento seo internal links

Kishan Savaliya

Top Rated Plus on Upwork

Panth Infotech Agency


Feature Description
Keyword-to-anchor replacement Case-insensitive, whole-word match. Inject into product descriptions, short descriptions, category descriptions, CMS pages, and CMS blocks.
Three reference types url (direct URL), product_sku (resolved via url_rewrite), category_id (resolved via url_rewrite). SKU and category references are looked up once per request and cached.
Excluded tags Keywords inside <h1><h6>, <a>, <button>, <script>, and <style> are never touched. Configurable.
Per-keyword max_replacements Cap how many times each rule fires across a single rendered page.
Per-page max_links_per_page Global ceiling to avoid over-optimisation.
Time-based activation Optional active_from / active_to gating per rule when the store-level toggle is enabled.
Store-scoped store_id = 0 rules apply everywhere; non-zero rules are scoped to a specific store view.
Priority Higher-priority rules are processed first, so important keywords win the link budget.
Nofollow Per-rule toggle to add rel="nofollow" to the rendered anchor.
URL Title Optional title attribute on the rendered anchor.
Mass actions Enable, disable, or delete many rules at once from the admin grid.
Safe rendering Dangerous URL schemes (javascript:, data:, vbscript:, file:) are rejected at render time even if the row somehow got into the database.

Six small pieces cooperate:

  1. Admin grid at panth_crosslinks/crosslink/index — standard Magento 2 UI component listing backed by the panth_seo_crosslink table.
  2. Admin form at panth_crosslinks/crosslink/edit/id/<ID> — reference-type switcher hides/shows the URL vs Reference-Value input depending on the selection.
  3. ReplacementService — HTML-aware engine. Splits the incoming markup into text segments, tag segments, and excluded-tag blocks so keywords inside headings, anchors, buttons, scripts, and styles are never touched.
  4. CatalogOutputPlugin — after-plugin on Magento\Catalog\Helper\Output::productAttribute/categoryAttribute — fires on description and short_description (product) and description (category).
  5. CmsFilterPlugin + CrosslinkFilterDecorator — wraps the CMS template filter returned by FilterProvider so filter() runs the replacement engine after Magento has processed widgets and directives.
  6. Master switch + config — admin toggles live at panth_crosslinks/general/* and are read per-store through a thin Helper\Config façade.

Requirement Supported
Magento Open Source 2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8
Adobe Commerce 2.4.4 — 2.4.8
PHP 8.1, 8.2, 8.3, 8.4
Hyva Theme 1.0+ (fully compatible)
Luma Theme Native support
Panth Core ^1.0 (installed automatically)

composer require mage2kishan/module-crosslinks
bin/magento module:enable Panth_Core Panth_Crosslinks
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:flush

Verify

bin/magento module:status Panth_Crosslinks
# Module is enabled

Visit Admin → Panth Infotech → Crosslinks to see the empty grid.


Navigate to Stores → Configuration → Panth Infotech → Crosslinks, or click Panth Infotech → Crosslinks Configuration in the admin sidebar.

Setting Default What it controls
Enable Auto Cross-Links Yes Master switch. If No, no rules are injected regardless of grid state.
Max Links per Page 5 Global ceiling on the total number of anchor tags injected into any single rendered page.
Excluded Tags h1,h2,h3,h4,h5,h6,a,button,script,style Comma-separated list of HTML tags whose contents (including nested content) are never rewritten.
Enable Time-Based Activation No When Yes, each rule's Active From and Active To timestamps gate whether the rule fires. When No, those fields are ignored.

Each setting is resolved at store-view scope, so you can have different link budgets and excluded tags per store.


  • Admin controllers extend Magento\Backend\App\Action. Every CRUD path declares its own ADMIN_RESOURCE constant and ACL is enforced via _isAllowed().
  • Save and MassDelete / MassStatus implement HttpPostActionInterface — GET requests are rejected. Form-key validation runs on every POST.
  • All DB writes use prepared parameters ($adapter->update($table, $row, ['id = ?' => $id])) — no SQL concatenation.
  • The anchor builder rejects dangerous URL schemes (javascript:, data:, vbscript:, file:) at render time and runs every user-supplied field (URL, title, matched text) through htmlspecialchars(ENT_QUOTES | ENT_HTML5).
  • The Save controller validates that the keyword does not contain < or > to prevent admin users from stashing HTML into the pattern column.

No links appearing on the frontend

  1. Flush caches: bin/magento cache:flush.
  2. Confirm Enable Auto Cross-Links is Yes at the store-view scope you are browsing.
  3. Confirm the rule's Active flag is Yes and its Apply to Product / Category / CMS checkbox matches the surface you are testing.
  4. If using Time-Based Activation, check Active From / Active To cover now.

A keyword is being linked inside a heading

The headings tag list (h1h6) is in Excluded Tags by default. If you removed it or misspelled a tag name, add it back.

Too many links on one page

Lower Max Links per Page (config) or lower a rule's Max Replacements.

A product SKU or category ID resolves to an empty link

Confirm the URL rewrite exists — select request_path from url_rewrite where entity_type='product' and entity_id=<ID> and store_id in (0, <STORE>). If no row exists, the rule's matched text is rendered as plain text (no broken anchor).


More Information
Module Category SEO & Indexing
Best For All Sizes

Need this customised?

Talk to Kishan directly — written quote, scope and timeline within 24 hours. No sales call.

WhatsApp

Crosslinks — Auto Internal Linking for Magento 2

$0.00
Step up

Customers usually upgrade to