Internal links

Internal links finds useful connections between your published content and suggests links that can help search engines discover related pages and help readers continue to the next relevant article.

The stored article is never rewritten. Approved links are inserted while WordPress builds the page. Disable a rule or remove the module and the original text remains unchanged, so there is nothing to roll back.

Where to find it

Go to Baza Helper → Content → Internal links. The tool is part of the Pro package.

The screen has five views: Suggestions, Links, Rejected, Phrases and Settings. A Suggestions card represents one pair of articles and shows one editable row for every available language.

Example: one card may contain separate English, Ukrainian and German anchor phrases for the same pair of translated articles.

First scan

Click “Scan content”. The scanner works in batches of 20 posts and keeps up to 600 best suggestions.

It can build phrases from:

  • published post titles;
  • Yoast SEO focus keywords;
  • Rank Math focus keywords;
  • SEOPress focus keywords;
  • your own phrases from the Phrases view.

Each post is searched only with phrases in its own language. Shortcode tags are masked. A phrase is matched as whole words, in any letter case, with HTML entities and ordinary or non-breaking spaces understood.

A link is not placed inside an existing link, code, preformatted text, a button, label, form field, SVG, figcaption or navigation. Headings are excluded when the setting to leave headings alone is active.

The scanner skips the article itself and its translations, an already linked target, an existing active rule, a pair and phrase already decided, overlapping positions and articles that have reached their link limit.

When phrases clash, an own phrase has priority over a focus keyword, and a focus keyword has priority over a title. Equal titles belonging to two targets are assigned to neither.

Example: an article is not offered a link to its own translation or to a target it already links to.

Suggestion cards

Each Suggestions card contains the source and target pair, language rows, a checkbox and an editable phrase for each language.

  • “Apply” accepts the selected language rows.
  • “Reject” rejects the pair.
  • “Apply all” applies suggestions in batches of 25.
  • The language filter narrows the list.
  • Pagination shows six cards per page.

At apply time the plugin checks the current article again. The words must still exist in an allowed position and the article must still have room under the link limit.

Example: edit an anchor, untick one language and apply the remaining rows.

Translations

One card groups the translations of the same source and target pair, so you can make one decision for the selected languages. Each version still uses its own language, title, focus keyword and own phrases.

Example: the English row may use “booking calendar”, while the Ukrainian row uses its own Ukrainian phrase.

Phrases

Open Phrases, find an article by title and enter its own phrases, one per line, for each language. They are stored in _baza_helper_il_phrases.

“Translate to the other languages” sends the strings through Translate\Content::translate_strings() and fills empty language fields. Review the result and save it before using the phrases.

Example: add “WordPress booking plugin” and “online booking calendar” on separate lines.

Links lists approved rules. Use search to find a rule and “Remove” to stop it. The article text is not changed.

Rejected lists rejected suggestions. Use “Suggest again” to return a pair for review.

Example: if you rejected a useful pair by mistake, return it with “Suggest again”.

Settings

Post types

Choose which published post types participate in scanning. The feature record does not specify the default selection.

Example: only selected types are included in the phrase index and scan.

Most links per article

Sets the maximum number of rules for one article. Default: 5.

Example: an article with five active rules has no room for a sixth.

Shortest phrase

Sets the minimum phrase length. Default: 4 letters.

Example: a three-letter phrase is ignored.

Use titles

Allows published titles to become phrases. The feature record does not specify the default.

Example: “WordPress Booking Calendar” can be found in another article.

Use focus keywords

Allows focus keywords from Yoast SEO, Rank Math and SEOPress. The feature record does not specify the default.

Example: a target’s focus keyword can become its anchor phrase.

Use own phrases

Allows phrases saved in _baza_helper_il_phrases. The feature record does not specify the default.

Example: add a common alternative name that is absent from the title.

Leave headings alone

Prevents links inside headings. The feature record does not specify the default.

Example: a phrase in an H2 stays plain while the same phrase in a paragraph may be linked.

Open in a new tab

Makes approved links open in a new tab. The feature record does not specify the default.

Example: enable it when internal links should open separately.

Add the target title

Adds the target article’s title to the generated link. The feature record does not specify the default.

Example: the link receives the target title when the setting is enabled.

Every rule or setting change clears page caches through the Baza Helper cache purge mechanism.

The Linker runs on the_content at priority 30. It processes only the main article on a single post page for a visitor, once per post and request. It does not run in admin, feeds, REST or AJAX.

The first free occurrence of every approved phrase is linked. Longer phrases are processed first, so links do not overlap or nest. A target that is no longer published is skipped.

Rules are cached per post, while baza_helper_il_count lets a site with no links avoid the query. Changes clear page caches so the next generated page uses current rules.

Example: removing a rule stops the generated link without restoring or editing stored content.

Limitations

Elementor pages are not scanned because their text is stored in post meta rather than ordinary post content.

The per-article limit controls how many active internal link rules an article can have. The scanner offers only the remaining room, and Apply checks the limit again.

Example: with a limit of five and three active rules, an article has room for two more.

For developers

  • baza_helper_internal_links_apply controls whether the rules are applied to the current output.
  • baza_helper_internal_links_rules filters the rules before they are inserted.
  • Rules are stored in {prefix}baza_helper_links with source post, target, phrase, normalized phrase key, language and active or rejected state.
  • Own phrases are stored in _baza_helper_il_phrases.
  • Generated links use class="baza-helper-link" and data-baza-helper-link="ID".

The table enforces a unique source, target and phrase combination. It is versioned by baza_helper_il_db, checked hourly and removed with the module options on uninstall.

Example: use baza_helper_internal_links_apply to prevent rule application for a chosen request.

Frequently asked questions

Why are there no suggestions?

There may be no matching phrase in the article’s language, the phrase may be too short or inside an excluded element, the target may be the article itself or its translation, the target may already be linked, the pair may already be decided, the link limit may be reached, or the page may be built with Elementor.

Check that the target is still published, the phrase remains in an allowed position, the article has room under the limit and you are viewing the main content of a single post as a visitor.

Open Links, find the rule and click “Remove”. The stored article does not need to be edited.

Last Modified: 24.10.2026