Repository navigation
Releases
Releases · indexnowkit/php-verify
0.4.0
Changed
- The pre-flight no longer uses the application's
http.client.VerifyConfig::transportConfig()drops it, and
Adapter\VerifyServices::transport()ignores the client locator: the pre-flight always builds the PSR-18 client the
core discovers, withmax_redirects: 0andverify.timeout. PSR-18 has no way to tell a client the application
handed over not to follow redirects, so such a client saw the final 200 and silently disabledverify.redirect,
verify.max_redirects, the host check on redirect targets and the loop detection.http.clientstill carries the
POST submissions of the inner submitter, so a proxy or an instrumented client keeps applying there. The
verify.transportline ofcheckis no longer a warning: it says which client does what. Verify\Adapter\VerifyServices::package()delegates to the core'sAdapter\OptionalPackage::verify()(core 0.13.0):
the name, the marker and the feature word live there, so an adapter asks about the package without loading this
class. Same object, same texts; adapters should callOptionalPackage::verify()directly.- Requires
indexnowkit/core ^0.13.
Fixed
- A relative
<link rel="canonical">resolves against the document's<base href>when it declares one (the
<base>itself against the page URL), as a crawler resolves it. A page with a<base>had its canonical computed
against the fetched URL instead, did not match, and was dropped as non-canonical — a refusal in the closed direction. verify.time_budgetis taken beforeverify.delaywaits, so delay plus budget can no longer overrun the
visibility timeout of the queue job the budget exists to fit.RobotsCache::key()strips[,]and:of an IPv6 host, as the core'sRetry\ForbiddenCounterdoes: the cache
key ofhttps://[::1]carried PSR-16 reserved characters and a strict store rejected it (the class degraded to one
fetch per process with a warning).
0.3.0
Added
Verify\Adapter\VerifyServices— what every framework adapter wires for this package, in one place:package(),
options(),config(), the pre-flighttransport(), therobots()cache, the decoratedsubmitter()and
submitterFactory(), thechecklines with their texts (installedLine(),installedCheck(),dispatchCheck(),
transportCheck(),sampleCheck()), and the*For()twins over the core's runtime graph (Adapter\Services:
transportFor(),robotsFor(),submitterFor(),submitterFactoryFor(),checksFor()). The Symfony bundle, the
Laravel and the Yii2 adapters build on it (their copies of the texts and constructions are gone); the next adapter
keeps only what its framework decides.
0.2.1
0.2.0
Changed
X-Robots-Tagparsing: a bot prefix applies to its own directive only.googlebot: noindex, noindex(two headers
joined by the header line) hid the second, globalnoindex, and the page was submitted.RobotsCachekeys by origin (robots.<scheme>_<host>_<port>for anything but https on 443): staging on
http://host:8080and production onhttps://hostno longer share onerobots.txtfor an hour.- The pre-flight transport reads at most 1 MiB of a page (
VerifyConfig::BODY_LIMIT) instead of the 50 MiB of the core's
GET limit; the signals live in the first 256 KiB. - Requires
indexnowkit/core ^0.11.
Added
verify.time_budget(60 s): the pre-flight of one batch stops when the budget is spent and the remaining URLs are
sent unverified with one warning, so a queue job never runs past its visibility timeout into a second worker.Check\DispatchCheck(verify.dispatch, with the adapter's queue mode) andCheck\TransportCheck
(verify.transport: an applicationhttp.clientkeeps its own settings, soverify.redirect,verify.max_redirects,
verify.timeoutand the host check on redirect targets may not apply) — the adapters register both.
0.1.1
0.1.0
First release (spec 17 §6.1, wave F). Requires indexnowkit/core ^0.9.
Added
Verify\VerifyingSubmitter— the pre-flight decorator ofSubmitterInterface: one GET per URL before the
decorated submitter sends it.noindex(X-Robots-Tag,<meta name="robots">), arobots.txtdisallow, another
canonical URL, a redirect and an origin error become skippedResults withReason::Noindex,RobotsDisallowed,
NonCanonical,Redirected,OriginError; 404 and 410 pass as deletions. Policiesverify.redirect: skip|follow
(after a 301/308 both URLs are submitted, after a 302/303/307 the original),verify.non_canonical: skip|replace,
verify.origin_error: skip|send; a redirect or a canonical to a host without a key is always a skip. Listeners
registered on the decorator see every result exactly once; the skipped results go to the PSR-14 dispatcher and the
submission store.verify.max_batch(100) sends larger batches unverified with a warning;verify.delaywaits
before the first GET outside a web request;enabled: false(the default) is a transparent delegate.Verify\PageSignals— the parser of the signals (fromResponse(url, Response):status,noindex,
noindexSource,canonical,location,contentType), regular expressions over the<head>of the first
MAX_BYTES(256 KiB), noext-dom;Verify\UrlReference::resolve()for relativehrefandLocationvalues.Verify\RobotsCache—robots.txtonce per host and process, shared through the PSR-16 cache under
<debounce.key_prefix>robots.<host>(verify.robots_cache_ttl); an unavailablerobots.txtallows with one warning.Verify\VerifyConfig— theverifyblock (OPTIONS,fromArray(),disabled(),loadOrDisabled(),
transportConfig(Config),userAgent()), the enumsRedirectPolicy,NonCanonicalPolicy,OriginErrorPolicy.Verify\Check\SampleCheck—check --sample=<url>/--sample-class=<FQCN>[:<id>]: one line per sample
(verify.sample), warnings only.- Documents:
docs/configuration.md,docs/operations.md(the fixed log lines),docs/bc.md.