Title: HrefHub
Author: Keshab Adhikari
Published: <strong>تشرینی یەکەم 6, 2026</strong>
Last modified: تشرینی یەکەم 6, 2026

---

گەڕان لە پێوەکراوەکان

![](https://ps.w.org/hrefhub/assets/banner-772x250.png?rev=3730767)

![](https://ps.w.org/hrefhub/assets/icon-256x256.png?rev=3730767)

# HrefHub

 لەلایەن [Keshab Adhikari](https://profiles.wordpress.org/kesadh/)

[داگرتن](https://downloads.wordpress.org/plugin/hrefhub.1.7.1.zip)

 * [وردەکارییەکان](https://ku.wordpress.org/plugins/hrefhub/#description)
 * [پێداچوونەوەکان](https://ku.wordpress.org/plugins/hrefhub/#reviews)
 *  [دامەزراندن](https://ku.wordpress.org/plugins/hrefhub/#installation)
 * [گەشەپێدان](https://ku.wordpress.org/plugins/hrefhub/#developers)

 [پشتیوانی](https://wordpress.org/support/plugin/hrefhub/)

## وەسف

You changed a URL. Now it is wrong in forty-seven posts and you have no list of

which ones.

Broken link plugins tell you what is broken. Search-and-replace plugins swap a
 
string across your database and hope. Neither of them shows you what you actually
have. HrefHub is the link **inventory**: every link on the site, grouped by where
it points, with the number of places it appears and what happens when you follow
it.

Then it lets you change one of them everywhere, in one action.

#### What it does

 * Lists every link found in post content and Gutenberg blocks, grouped by destination
   URL
 * Shows how many places each URL appears, and which posts they are
 * Checks HTTP status and counts the redirect chain, so “three redirects” reads 
   differently from “404”
 * Filters by status, internal or external, host, post type, and anchor text
 * Changes a URL everywhere it appears, with a confirmation preview first
 * One-step undo of the last change
 * Bulk action: replace every redirecting URL with its final destination
 * CSV export of whatever you are currently looking at

#### The one that saves an afternoon

Sites accumulate redirects. A link you added three years ago now goes through two

or three hops before it lands. Filter to **Redirecting**, select all, and choose
_Replace redirects with their final destination_. Every one of them is rewritten
to point straight at where it already ends up.

#### What gets scanned

This version reads:

 * All public post types, plus reusable blocks — untick any you do not want under
   _HrefHub  Settings_
 * `post_content` HTML anchors
 * Gutenberg block attributes — button URLs, image links, cover backgrounds and 
   so on

This version does **not** read links stored by page builders (Elementor), custom

field plugins (ACF), navigation menus, widgets, theme options or FSE templates. 
They are not listed and they are not changed. The admin screen states this too, 
so you always know what the numbers cover.

Pages built with Elementor, Beaver Builder or Bricks are skipped as a whole. The

builder displays them from its own data, and the copy it leaves in post content 
is not what visitors see, so changing links there would change nothing. The admin
screen shows how many were skipped.

#### Careful by default

This plugin edits your content, so it is built to be boring about it:

 * A preview before every write, showing exactly how many occurrences in how many
   posts
 * A snapshot of every post before it is touched, and a one-click undo
 * Post revisions are left switched on, as a second safety net
 * No link is called broken until it has failed twice — 403, 429 and 503 get a “
   needs review” state instead, because a bot filter is not a dead link
 * Your own site’s links are resolved internally rather than fetched over HTTP, 
   which is faster and avoids loopback stalls
 * Scanning runs in small batches, so it finishes on managed hosts that kill long
   requests

#### Privacy

HrefHub makes HTTP requests to the URLs found on your site in order to check
 their
status. It sends no data anywhere else, has no external API, and does not phone 
home.

## دامەزراندن

 1. Upload the `hrefhub` folder to `/wp-content/plugins/`, or install through Plugins
    Add New.
 2. Activate the plugin.
 3. Open **HrefHub** in the admin menu and click **Scan site**. It collects every link,
    then checks each one’s status.

## پهد

### Will it find links inside Elementor or ACF?

Not in this version. Those live in serialized meta and JSON rather than post
 content,
and reading — and more importantly, safely writing — them is a separate piece of
work. The plugin never claims to have scanned them: pages built with Elementor are
skipped entirely, and the admin screen tells you how many.

### Is a bulk change reversible?

The last change is, in one click. Every post is snapshotted before it is written,

and undo restores it — unless you have edited that post since, in which case it 
is skipped rather than overwriting your work. Post revisions give you a second route
back.

### Why is a link marked “needs review” instead of broken?

Because the server answered in a way that does not prove the link is dead. Cloudflare

challenges, rate limits and bot filters all look like failures and are not. Nothing
is flagged broken until it has failed twice.

### Does it slow my site down?

No. Scans run in the admin screen on demand, and the only other work is a quick 
local re-read of a post’s links when it is saved, trashed or deleted. Nothing hooks
the front end.

### What happens when I uninstall?

Its three database tables and all its options are removed.

## پێداچوونەوەکان

هیچ پێداچوونەوەیەک نەنووسراوە بۆ ئەم پێوەکراوە.

## بەشداربووان و گەشەپێدەران

“HrefHub” نەرمەواڵەیەکی سەرچاوە کراوەیە. ئەم کەسانەی خوارەوە بەشدارییان تێدا کردووە.

بەشداربووان

 *   [ Keshab Adhikari ](https://profiles.wordpress.org/kesadh/)

[“HrefHub” وەربگێڕە بۆ زمانەکەی خۆت.](https://translate.wordpress.org/projects/wp-plugins/hrefhub)

### دەتەوێت بەشداربیت لە گەشەپێدان؟

[گەڕان لە کۆدەکەدا بکە](https://plugins.trac.wordpress.org/browser/hrefhub/)، سەیری
[تەمارگەی (SVN)](https://plugins.svn.wordpress.org/hrefhub/) بکە، یان بەشداربە لە
[ڕووداوتۆماری گەشەپێدان](https://plugins.trac.wordpress.org/log/hrefhub/) لە ڕێگەی
[(RSS)](https://plugins.trac.wordpress.org/log/hrefhub/?limit=100&mode=stop_on_copy&format=rss).

## ڕووداوتۆمارگەریی گۆڕین

#### 1.7.1

 * Re-checking selected links from the bulk actions no longer keeps the page loading
   until every link is done: they are checked a few at a time with a progress bar,
   the last link checked, a Stop button and a summary.
 * Stopping “Check links” part-way no longer leaves links with a status but “Last
   checked: never”. Each link keeps its real check date.

#### 1.7.0

 * Everything HrefHub shows now sits in one panel, with its own header and its own
   message style, so its messages no longer mix with other plugins’ notices at the
   top of the page.

#### 1.6.0

 * The Issues view is split into two sections — Broken, then Needs review — each
   with a short note on what to do.
 * The Status column now explains each link in plain words (“Page not found”, “Timed
   out”, “Blocked by Cloudflare — not a dead link”) instead of raw server messages,
   which stay available on hover.
 * A link that has failed once now says it will be confirmed on the next check, 
   so a 404 is never silently waiting.
 * A “Review N issues” button at the top goes straight to everything that needs 
   fixing.
 * All / Internal / External is now a one-click switch above the table.
 * The summary cards show how many problem links are on this site and how many point
   elsewhere.

#### 1.5.0

 * Cleaner top of the screen: one status line (last scan, posts, links and the places
   they appear), and three buttons — Scan site, Check links, Export CSV — that give
   way to a single Stop button while a scan runs.
 * Summary cards ordered by severity — Broken, Needs review, Redirects, Links found—
   with a plain explanation of what “Needs review” means.
 * New Issues filter: broken, needs-review and unreachable links together.
 * Each row has a visible “Change URL” button; Re-check, Ignore and Unlink are in
   a small menu beside it.
 * Status labels carry an icon as well as a colour, and blue is now used only for
   buttons and links.

#### 1.4.0

 * Changing a URL now opens a proper dialog: type the new URL, preview every post
   that will change, then confirm. Errors show in the dialog instead of browser 
   pop-ups.
 * Unlink asks for confirmation in a dialog that says how many places the link will
   be removed from.
 * New “Check all links now” button re-checks every link without waiting for the
   weekly re-check.
 * A status line shows when the site was last scanned and when links are next due
   for a check.
 * Scan and check progress now has a progress bar, and a run with nothing to check
   says so instead of reloading straight away.
 * The summary counts are cards that filter the table to broken, redirecting or 
   needs-review links.
 * A clearer first screen before the first scan, and a message after Undo saying
   what was restored.

#### 1.3.0

 * Scanning now reports progress in two labelled steps: reading posts (with the 
   number of links found so far), then checking link status.
 * Link checking shows how many are due before it starts, how many are done, the
   last link checked and its result, and why the remaining links are not being checked.
 * Links are checked in smaller batches, so the progress count moves steadily.
 * A summary is shown when a scan finishes or is stopped: posts read, links found,
   links checked, and the current number of broken, redirecting and needs-review
   links.

#### 1.2.9

 * After changing or unlinking a URL, a message now says how many posts were changed
   and, when a run stops at its 50-post limit, how many still use the link.
 * Unlink now follows the same 50-posts-per-run limit as changing a URL.
 * The change preview counts every post that uses the link, not just the first few
   hundred.
 * CSV export now includes every link in the current view instead of stopping at
   5,000.
 * Scan and check progress now say what is being counted, and how many links were
   skipped from checking and why.

#### 1.2.8

 * Pages built with Elementor, Beaver Builder or Bricks are no longer scanned or
   changed. Those builders display a page from their own data, so a change to its
   post content was reported as done but never reached visitors. The admin screen
   now says how many were skipped.
 * Unlink no longer removes the link from a button block, which left the block invalid,
   and now also finds relative links.
 * Link checks refuse private and local network addresses, and never download more
   than a few kilobytes of a page.
 * The change-URL preview can now be translated.
 * Uninstalling also removes the saved “links per page” screen option.

#### 1.2.7

 * Updated author details.

#### 1.2.6

 * Admin notices after saving settings or running a bulk action are now stored on
   the server instead of being passed in the page address.

#### 1.2.5

 * Code hardening for the WordPress.org Plugin Check: every database query now passes
   table names through `$wpdb->prepare()`, and every AJAX request verifies its security
   token before reading any input.
 * Tested up to WordPress 7.1.

#### 1.2.4

 * Links to your own archives — custom post type archives, category, tag and author
   pages — are now resolved properly instead of reported as “could not be resolved”.
   Links to files such as PDFs and images are recognised too.

#### 1.2.3

 * A link refused by Cloudflare, Akamai, Imperva, Sucuri, DataDome or AWS WAF now
   says which service blocked it, instead of a generic “blocked by the host”. These
   are bot filters, not dead links — the page usually loads fine in a browser.

#### 1.2.2

 * Scan site now checks link status too, straight after collecting links, with a
   progress count and a Stop button. The separate _Check link status_ button is 
   gone. A scan only re-checks links that are new or were last checked more than
   7 days ago.
 * Saving a post updates its links in the inventory straight away. New links are
   checked on the next scan.

#### 1.2.1

 * Fix: links in trashed or deleted posts stayed in the inventory, and replace-everywhere
   could still rewrite them. Trashing or deleting a post now removes its links straight
   away, and restoring it from the trash scans it again.
 * Fix: a full scan now drops links recorded for posts it no longer reaches, so 
   rows left behind by earlier versions are cleaned up.

#### 1.2.0

 * New Settings screen: choose which post types are scanned, with a count of each.
   Unticking a type removes its links from the inventory straight away; post types
   added later by other plugins are scanned by default.
 * Fix: links were re-checked early or late by the site’s UTC offset, because the
   last-checked time was stored in site time but compared in UTC. Old undo snapshots
   were pruned on the same shifted schedule.

#### 1.0.0

 * First release: link inventory from post content and Gutenberg blocks, status 
   and redirect checking, replace-everywhere with preview and one-step undo, bulk
   redirect flattening, CSV export.

## مێتا

 *  وەشان **1.7.1**
 *  دوایین بەڕۆژکردنەوە **1 ڕۆژ لەمەوبەر**
 *  دامەزراندنی چالاک **کەمتر لە 10**
 *  وەشانی وۆردپرێس ** 6.2 یان بەرزتر **
 *  تاقیکراوەتەوە تا **7.1.3**
 *  وەشانی PHP ** 7.4 یان بەرزتر **
 *  زمان
 * [English (US)](https://wordpress.org/plugins/hrefhub/)
 * تاگەکان
 * [broken links](https://ku.wordpress.org/plugins/tags/broken-links/)[link checker](https://ku.wordpress.org/plugins/tags/link-checker/)
   [links](https://ku.wordpress.org/plugins/tags/links/)[redirects](https://ku.wordpress.org/plugins/tags/redirects/)
   [search replace](https://ku.wordpress.org/plugins/tags/search-replace/)
 *  [بینینی پێشکەوتوو](https://ku.wordpress.org/plugins/hrefhub/advanced/)

## هەڵسەنگاندنەکان

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/hrefhub/reviews/#new-post)

[بینینی هەموو پێداچوونەوەکان](https://wordpress.org/support/plugin/hrefhub/reviews/)

## بەشداربووان

 *   [ Keshab Adhikari ](https://profiles.wordpress.org/kesadh/)

## پشتیوانی

هیچت هەیە بۆ وتن؟ پێویستت بە یارمەتییە؟

 [بینینی مەکۆی پاڵپشتی](https://wordpress.org/support/plugin/hrefhub/)