=== Postlinkly ===
Contributors: iamkingsleyf, kraftysproutsmedia
Tags: internal linking, links, seo, link building, orphaned content
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 1.18.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Smart internal linking for WordPress: link suggestions, one-click insertion, link reports, and broken internal link detection. No subscriptions.

== Description ==

Internal links help readers find more of your content and help search engines understand how your posts relate to each other. Adding them by hand means remembering what you have already written, searching for it, and copying URLs — so most sites end up with too few, and with older posts that nothing links to at all.

Postlinkly does the remembering for you. Open a post, and it suggests other posts on your site worth linking to, points to the exact words in your text that would make a good link, and lets you add the links you want with a click.

= How it works =

1. Open any post or page in the block editor or the Classic Editor and load suggestions.
2. Postlinkly reads your text sentence by sentence and compares it with the titles and focus keywords of your other posts. It suggests a link where a sentence genuinely talks about another post's subject, and picks the link text from the words already in that sentence.
3. Review the list. Keep a suggestion, widen or narrow its link text, skip it, or tell Postlinkly never to suggest that page again.
4. Insert one link, or tick several and insert them together.

Postlinkly never rewrites your content and never adds a link you have not approved.

= Link suggestions you can trust =

* **Link text from your own words.** The link text is taken from your sentence as written; nothing is invented or reworded.
* **Relevant, not random.** Suggestions weigh how closely a sentence matches another post's title and focus keyword, and how distinctive the shared words are across your site, so a rare shared word counts for more than a common one.
* **Fresh ideas each time.** Posts you already link to are left out, so every run offers new destinations.
* **Adjustable link text.** Make the suggested link text longer or shorter before inserting it.
* **Dismiss what doesn't fit.** Hide a suggestion for this post only, or exclude a page from suggestions site-wide.
* **Export the list.** Download the suggestions for a post as a CSV file.

= Safe link insertion =

* Links are added only where the link text stands as a whole word — never in the middle of another word, inside a heading, or inside an existing link.
* Adding links does not change a post's "last modified" date, so your sitemaps and feeds don't treat old posts as newly updated.
* If you have unsaved changes in the editor, Postlinkly asks you to save first instead of overwriting your work.
* If WordPress would strip any of your post's content when saving (for example embeds, for users without the permission to add them), the insert is refused and explained, rather than going ahead and losing content.

= See your whole link structure =

* **Dashboard** — broken internal links, posts nothing links to, and how your internal linking has grown over the last six months, at a glance.
* **Link Report** — every post with the number of internal links in and out and external links out. Click a count to see exactly which links it means. Export it as CSV.
* **Orphaned posts** — published posts that no other post links to, ready for you to build links to.
* **Broken internal links** — links pointing to a post that was deleted, unpublished, scheduled, or made private, with the reason shown and a direct link to fix the post.
* **Link Profile column** — inbound and outbound link counts right in your Posts list, with a warning on posts nothing links to.

= Use the focus keywords you already set =

If you use **Yoast SEO**, **Rank Math**, **All in One SEO**, **SEOPress**, or **Squirrly SEO**, Postlinkly reads the focus keyword you gave each post and uses it to find link opportunities — even where a post's title uses different words than your sentence. There is nothing to set up: keywords are picked up when the content index runs and kept current each time you save a post.

= You stay in control =

* Choose which post types and post statuses are scanned and suggested.
* Exclude individual posts (by ID or URL) and whole categories.
* Set how many suggestions to show, how many words link text may have, and how old a target post may be.
* Limit how many links go into one post, and how many links point at one post.
* Leave your introduction link-free by skipping the first paragraphs.
* Prevent the same words from linking to different posts (keyword cannibalization) and prevent two posts from linking to each other.
* List phrases that must never become links.

= Built for real sites =

* Works in the block editor and the Classic Editor.
* Understands word forms ("link", "links", "linking") in Catalan, Danish, Dutch, English, Finnish, French, German, Italian, Norwegian, Portuguese, Romanian, Russian, Spanish, and Swedish. Other languages are matched by whole words.
* A background index keeps link data and word statistics up to date and carries on after interruptions, even on sites where WordPress's scheduled tasks don't run reliably.

= Private by design =

* No account, no subscription, and no remote service. Everything runs inside your own WordPress site.
* Postlinkly makes no outside connections and does not track your visitors.

= Current limitations =

* External (outbound) links are listed in the report but not checked for being broken; broken-link detection covers links between your own posts.
* Content stored only inside a page builder's own data (for example some Elementor or Divi layouts) is not scanned yet. Postlinkly reads the standard post content.

== Installation ==

1. In your WordPress dashboard, go to **Plugins → Add New Plugin**, search for **Postlinkly**, then click **Install Now** and **Activate**.
2. Go to **Postlinkly → Tools** and start the content index. It reads your posts in the background so Postlinkly knows what you have written; you can leave the page while it runs.
3. Optionally, visit **Postlinkly → Settings** to choose which kinds of content to include and how suggestions behave.
4. Open any post in the editor and load suggestions from the Postlinkly panel.

== Frequently Asked Questions ==

= Is Postlinkly free? =

Yes. Every feature described here is free to use on as many sites as you like, with no account, no trial period, and no usage limits.

= Does it work with my SEO plugin? =

Yes. Postlinkly works alongside Yoast SEO, Rank Math, All in One SEO, SEOPress, Squirrly SEO, and other SEO plugins, and does not change anything they manage. With any of those five, it also uses the focus keyword you set on each post to find better link opportunities.

= Does it work with page builders? =

Postlinkly reads the standard post content that the block editor and Classic Editor save. Content stored only inside a page builder's own data (for example some Elementor or Divi layouts) is not scanned yet.

= Can I use it alongside another internal-linking plugin? =

Yes, they won't interfere with each other technically. Running two tools that both suggest or add links to the same posts can leave you with duplicate links, though, so most sites are better off using one.

= Does it send data anywhere? =

No. Everything Postlinkly does happens inside your own WordPress site. It doesn't connect to any outside service and sends nothing about your content, your visitors, or your users anywhere.

== Screenshots ==

1. Link suggestions in the block editor, with the link text highlighted in your own sentence.
2. The Dashboard: broken links, orphaned posts, and internal linking over time.
3. The Link Report: links in and out for every post, with broken links flagged.
4. The Settings page.

== Changelog ==

= 1.18.2 =
* Suggestions whose sentence contains the linked post's focus keyword now show the "Focus keyword match" badge in the block editor, and the suggestions CSV export fills its Keyword Match column. Both had never appeared.

= 1.18.1 =
* Focus keywords from Yoast SEO, Rank Math, All in One SEO, SEOPress, and Squirrly SEO now count towards link suggestions. They are picked up by the content index and refreshed each time a post is saved.
* After an update adds something new to the content index, it now runs by itself on sites whose index had already finished, instead of waiting for a manual rebuild.
* The content index no longer reports a failure left over from a part of the index that no longer exists.

= 1.18.0 =
* First public release.
* Link suggestions while you edit, with link text from your own sentence.
* One-click and bulk link insertion; nothing is added without your approval.
* Link report with inbound/outbound counts and CSV export.
* Orphaned posts and internal link rot detection.

== Upgrade Notice ==

= 1.18.1 =
Suggestions now use the focus keywords from your SEO plugin. They are imported automatically in the background after updating.

= 1.18.0 =
First public release.
