== Changelog ==

The full release history for Planet Social Redirector. Recent releases are
also in readme.txt; WordPress.org trims a long readme changelog, so the
complete history lives here.

= 1.8.4 =
* The directory description now leads with what this plugin does differently: it checks a destination before writing a rule, proves each fix straight afterwards, and keeps a change log you can undo from. The plugin itself is unchanged apart from its version number.

= 1.8.3 =
* The plugin is named Planet Social Redirector again, so its WordPress.org address matches the folder it has always installed into and nothing on your site has to move.
* The console this plugin pairs with is called by its WordPress.org name, PSM SEO Site Console, everywhere it is mentioned, and the link on the tools page opens its directory listing.
* The moved page catcher switch has its own Save button instead of saving the moment it is ticked.
* The External services section now says exactly when the plugin checks an address: when you create, import, verify or undo a fix. It used to say a logged 404 was checked too, which it never was.
* The full release history moved to changelog.txt, which comes with the plugin, because WordPress.org shows only the first 5,000 characters of this changelog.

= 1.8.2 =
* The plugin header now declares Requires at least: 6.0 and Requires PHP: 7.4, the same as this readme, so WordPress will not activate the plugin where it cannot run.

= 1.8.1 =
* Renamed to "Planet Social Redirector: 404 Log and Redirects" so it is not mistaken for the browser extension of the same family. The extension finds broken pages as you browse; this fixes them at the source, for every visitor and every search engine. Nothing else changed: same settings, same rules, same log.
* Redirect destinations on a private network are refused. Pointing a rule at an address like 127.0.0.1, 10.0.0.5 or a cloud metadata endpoint used to make your server fetch it and report back. Addresses that do not resolve are refused too. Your own site is always allowed, so checking your own pages still works on a local install.
* The requests this plugin makes now identify themselves with the real version number. They had said 1.4 since 1.4.
* The readme now declares every outbound request the plugin makes and when.

= 1.8.0 =
* A broken address Google has in its index now outranks one nobody has ever asked for, and says which of the two it is. Google goes on offering an indexed address until it is fixed or removed, which is a different and worse problem than a dead link nobody follows. Needs the PSM SEO Site Console plugin connected to Search Console; without it nothing changes.

= 1.7.0 =
* The queue can see what Google sees. With the PSM SEO Site Console plugin connected to Search Console, a broken address that Google showed to people in the last 28 days rises to the top, and the number of times is printed as the reason. Until now severity could only see this site: how many pages link to a break and how often it was hit, which is real evidence and says nothing about whether anybody outside was looking.
* Impressions raise a finding and never lower one, and with no Search Console connected nothing changes.

= 1.6.0 =
* Fixes can arrive from PSM SEO Site Console without anyone copying JSON between two screens. What arrives is a plan, never a change: the rules are checked the same way a pasted export is checked, they wait in wp-admin under Tools then Planet Social Redirector, and nothing is written until you press Apply. A call from the console can ask this site for a redirect and cannot create one, which stays true however that call was authenticated.
* A plan that arrived is checked again when you open it, against your site as it is then, because a week can pass between sending and reading.

= 1.5.1 =
* Housekeeping from the official Plugin Check: the readme now states the current WordPress version, and the one direct database call, the uninstall sweep that clears per user transients, carries its justification where the checker can see it. Nothing you use changes.

= 1.5.0 =
* An import no longer writes anything on the first press. Rules arriving in bulk from the console or the extension now go through the same door as a single fix: addresses that are not pages are refused, rules that already exist are refused, a destination that does not answer is held back, and a destination that is itself redirected is named as the chain it would create. You see every row and untick what you disagree with before a single rule is written. This was the last place in the plugin where a bad rule could be created without anyone seeing it first.
* Every imported rule is now verified straight after it is written and recorded in the change log with the reasons the console attached to it, so an import can be undone one rule at a time instead of not at all.
* Large exports are read in batches of fifty, because checking a destination is a real request and one admin page load should not make five hundred of them. The screen says how many are left to paste.

= 1.4.3 =
* The change log records the destination you chose. It was recording the one the finder had suggested, so a redirect sent to /sitemap.xml could read "a destination is ready: /vocabulary/sitemap/", naming a page nobody picked. A record that cannot be read back honestly is worse than no record.
* App association files are machine addresses now, not repairs. A phone asks for /apple-app-site-association or /assetlinks.json to decide whether a link opens in an installed app, and it expects that file, so a 301 there breaks the app link rather than fixing anything. One of these was in a live queue sixteen times.
* The file names scanners try are now named as scanners: /info.php and its family, the Apache status handlers, and .DS_Store. One of these was sitting in a live queue sixteen times over, asking its owner to make a decision about a file nobody published. Addresses ending in .php are still treated as pages, because a site moving off a PHP CMS has real ones with real links, and those are exactly what this plugin is for.

= 1.4.2 =
* Site verification files are now recognised as machine addresses and can never be redirected. A search engine asks for its verification file forever and expects the file's own contents, so a redirect does not satisfy it and can cost you the verification. Two of these were sitting in a real queue, being requested eighteen and nineteen times.

= 1.4.1 =
* The repair queue now contains pages, and only pages. Addresses that software reads (.well-known, robots.txt, sitemaps, service workers, app manifests) are listed separately and can never be redirected, because a 301 there can stop a certificate renewing or confuse every crawler that asks. Scanner probes looking for keys, backups and admin panels are listed as what they are. A crawler that reads a phone link as a page address is named as that, since no redirect fixes it.
* Severity no longer trusts a referrer it cannot check. A Referer header is written by whoever makes the request, and on a live site scanners were sending referrers pointing at the very address they were requesting, which promoted a dozen probes to the top of the queue. A referrer now counts as evidence only when it names a page that exists on this site, and a self referential one is discarded.

= 1.4.0 =
* Every logged 404 now carries a severity, worst first, counted from this site rather than estimated: how many requests actually landed on the missing page, whether something out there links to it so it keeps happening, and whether a destination is ready. Each row shows the evidence it used, so you can disagree with it.
* The destination is checked before anything is created. A redirect into another broken page is worse than the broken page it replaces, so if the destination does not answer, nothing is written and the reason is shown, with Apply anyway for the case where you know it is about to exist.
* Every fix is verified straight after it is made. The old address is requested again to confirm it now redirects and lands on a page that works, and the answer is recorded rather than assumed.
* A change log: what changed, who changed it, why, and what the check said. One click puts any of it back, and an undo is recorded as its own entry instead of erasing the original.

= 1.3.0 =
* Likely meant: every row of the 404 log names the published page the address was most likely meant to be, with the reason, and fills the Create 301 box when the match is clear.
* Unfilled placeholder links are recognised and called out as links to fix.
* WordPress system addresses (wp-login.php, wp-admin, wp-json, wp-cron.php, feeds, embeds, wp-content files) are no longer logged.
* Ignore any logged path, with an Ignored paths list to undo it.
* A brief for an AI assistant, written from the log, with a Copy button.
* Uninstall now removes every option the plugin stored.

= 1.1.0 =
* New moved page catcher, on by default with a toggle on the tools page. When a published post or page changes its permalink, the plugin creates the 301 automatically, refreshes any existing rule that covered the old address, and re aims rules that pointed at it so redirect chains never form. A dismissible notice tells you what was caught, and the rule sits in the normal table where it can be reviewed or removed.

= 1.0.2 =
* Plugin Check pass: the referer and rule index inputs are now sanitized directly with esc_url_raw and absint, and the tested up to header is current.

= 1.0.1 =
* Renamed to Planet Social Redirector (slug planet-social-redirector) so the plugin carries no restricted or trademarked term.
* Plugin Check pass: text domain now matches the plugin slug, request and referer inputs are unslashed and sanitized, and a translators comment was added.

= 1.0.0 =
* First release: 301 redirect rules, server side 404 logging with hit counts, one click promote, and JSON import from the console and extension.
