Skip to content

Methodology · Sources and limits

A finding is an observation.
Know what it can tell you.

Keep the detector inventory, the scoring subset and the measured page conditions separate.

187

Registered detectors

The detector inventory. This is not a claim that every detector measured your page.

25

Scoring-eligible evaluators

The subset eligible for scoring. A technical result does not describe search visibility.

Varies by scan

Conditions measured
per scan

Only conditions actually measured belong in a scan’s evidence. Missing data stays unknown.

The other 162 detectors remain unscored observations. A measured result is not a Google ranking formula or an AI citation prediction.

The evidence chain

Start with a source.
Keep its boundary.

  1. Page capture

    A captured page can expose a title, canonical declarations, robots directives and structured-data markup. The supported custom HTML repair starts with a specific observed noindex condition.

    The robots.txt rules, Googlebot-specific directives and X-Robots-Tag are separate observations. Crawling permission and indexing instructions are not interchangeable.

    A canonical declaration can be inspected alongside its target and conflicting declarations. It cannot establish Google’s selected canonical; that requires separate indexed URL inspection evidence.

  2. Owner intent

    A page may be excluded from search on purpose. The repair path asks the owner to confirm the intention before offering a supported edit or developer handoff.

    The supported path is developer-assisted custom HTML. You or your developer publishes the edit; AuditLamp does not write to the site or provide a CMS plugin recipe.

  3. Fresh recheck

    A new capture checks the selected condition after the edit. A receipt records the inputs, times and measured scope. An unavailable capture remains unresolved.

    A passed condition does not establish Google indexing, a selected canonical, ranking improvement or an AI citation.

  4. Search Console

    Owned-property clicks, impressions and average position belong with their dates and filters. Returned queries can omit data. Average position is an average across impressions, not a numbered results page.

    Connect an owned property on Full Report, Monitor or Agency. Earlier search evidence cannot be explained by a later page capture alone.

  5. Top results

    The comparison is not measured. No result URLs, competitor pages or ranking positions are supplied by a live search provider in this workflow.

    A future comparison would need dated sources, preserved result URLs and stated page coverage. Missing data cannot support a claim about what a competing page lacks.

    See the current scope

Two separate records

A changed condition.
An unanswered search question.

Condition receipt

A supported fresh-capture flow checks one condition after a change. Download the before and after evidence with its timestamps and scope.

A receipt may confirm the measured condition, find it still present or show an unresolved measurement. It does not certify the whole page.

Open repair work

Search follow-up

Later complete Search Console windows can describe observed changes under the same filters. Keep that record separate from the page receipt.

Missing or incomplete windows stay unknown. Even a later increase does not prove the edit caused it.

Open search evidence

What the method does not claim

Evidence helps you choose.
It does not promise.

A ranking probability would need calibration that this method does not have. It gives none.

Missing is not absent.

An unavailable page or feed cannot be recorded as zero, a pass or proof that a feature is absent. Measured absence and missing evidence stay different.

Technical scope is limited.

A detector inventory is not a count of ranking signals. A passing condition does not establish search visibility, authority or a future Google decision.

The complete method · measured-checks-v2006

Inspect how
the number is made.

The full calculation, historical limits, dashboard measures and source-linked detector ledger remain available below.

Calculation, source definitions and all 187 detectors

What a new score means

For each distinct condition, count the captures that met it and divide by the captures where it could be measured. Average those condition fractions equally, multiply by 100 and round to a whole percentage. The report includes the numerator, denominator, captured URL, timestamp, input measurements and HTML hash. It also shows inspected pages separately from discovered URLs.

percentage = round(100 × mean(met captures / measured captures, per condition))

For example, if one condition is met on 1 of 2 inspected pages and a second is met on 1 of 1, their equal-condition mean is 75%. This is a descriptive calculation, not an estimate that the website is 75% secure or has a 75% chance of ranking. A title check shared by SEO and accessibility counts once in the overall calculation.

Missing inputs, failed probes and inapplicable elements are excluded from both numerator and denominator. No forms means no form-action result; a TLS timeout does not prove a bad certificate. Small samples stay small: a one-page scan does not certify the other discovered pages.

The number describes the measured subset. A 100% result can coexist with serious issues outside that subset. Review the actual findings and coverage rather than treating a high percentage as a clean bill of health. Attribute presence does not establish meaning, usability or standards conformance.

What changed from historical scores

New reports do not use arbitrary ranking weights, half-credit warnings, AI/Local deductions, a 79 ceiling, or a 70/30 security blend. AEO, GEO, Local and privacy observations have no numeric grade until a defensible measurement contract exists. Model-generated writing assessments have no citation score.

Saved historical scores retain their original values. Their original method may not have been recorded. Each new report stores its engine and scoring versions. Score-history lines join only matching recorded methods and measured scopes; a release or broader scan must not masquerade as a ranking recovery.

Sources support conditions, not ranking points

The table below links the technical source for each scored condition. The implementation measures the narrower criterion stated beside that link. It does not claim to implement an entire standard. The unscored list includes content heuristics, optional markup checks and signals whose applicability or detection needs more validation.

Google lists crawl access, successful responses and indexable content among its technical requirements, while explicitly declining to guarantee indexing. Its AI-feature guidance does not establish an AEO score, a required passage length or a special llms.txt requirement. Technical requirements · AI-feature guidance

Other dashboard measurements

SurfaceMeasurement and limit
Search ConsoleOwned-property clicks, impressions and average position for stated dates and filters. Returned queries can omit data; average position is not a fixed rank for every query. No conversion into an invented search score. Definitions
Traffic decline markerAdjacent 14-day windows with observed daily data, at least 100 prior impressions and a decline of at least 50%. The chart marks the largest absolute qualifying loss. These are disclosed display thresholds, not a statistical test or diagnosis. Unreturned dates remain unknown.
Business ProfilePresence of returned profile fields, plus provider review counts and ratings. Optional fields are not legal or ranking requirements. Photos and attributes are unknown when the endpoint does not return them. Recent-review counts refer to the returned sample, up to 50 reviews. No weighted review score or local-ranking blend. Profile fields
Common Crawl graphA link-graph measure from a dated external corpus, with its release, coverage and referring-domain counts. The harmonic-rank transformation is 100 × (1 − ln(rank) / ln(domain count)). It is AuditLamp's graph metric, not Google's internal PageRank or a calibrated ranking probability. A missing domain is unknown, not zero authority.
Internal page powerA calculation over the inspected site's link graph: damping 0.85, 40 iterations, scaled to its largest value. It describes that sampled graph only. Changing the crawl sample can change the values without any search change.
Page speedCrUX field observations and Lighthouse lab results remain labeled with their provider and scope. A lab score is not a measured ranking position. Field data can be unavailable for small samples. CrUX · Lighthouse scoring
Knowledge graphProvider-returned entity matches and relevance values are provider metrics. They do not establish a Google Search ranking or independent authority.
AI writing assessmentA model's interpretation of a bounded text excerpt, labeled as an assessment. It is not an observed AI answer, citation or independent fact check.

How ranking validation must work

Collect dated results for a declared query, search engine, country, language and device. Preserve each exact ranking URL and its original position, then scan that URL using one engine revision and time window. Failed scans remain failures of measurement. Homepage substitutes, renumbered search results and stale scans are excluded.

Compare pages within the same query. Record random sampling seeds and retain queries that do not favor AuditLamp. Separate calibration from held-out evaluation before claiming predictive value. Correlation alone cannot establish that a proposed edit causes ranking gains. The current validation data does not justify learned ranking weights.

What our data can and cannot establish

The Common Crawl graph can support graph comparisons. Scan archives can support detector regression and dated change analysis. Search Console can supply owned-property outcomes. Transcripts and creator scrapes can suggest hypotheses, but they are not ranking labels or evidence that a tactic works. Raw source files, measured scope and provenance are necessary before combining datasets.

Every detector and its scoring disposition

Method measured-checks-v2007. All 187 registered detectors are listed. 25 have explicit measurement contracts; the other 162 are unscored observations. The title measurement appears in two categories but counts once in the overall calculation. Registry membership is not evidence of ranking validation.

Scoring-eligible evaluators

CheckPrecisely what is measuredTechnical source
gate.crawlableDeclared Googlebot and Bingbot permission for the requested pathSource
gate.indexableNo applicable noindex/none directive in the captured Googlebot or generic directivesSource
gate.sitemapA sitemap was fetched, is well-formed XML and has a urlset or sitemapindex rootSource
core.titleExactly one nonempty document title in the parsed headSource
core.meta_descriptionExactly one meta description element with nonempty content in the pageSource
core.h1Exactly one nonempty h1 element (a common heading convention, not a Google requirement)Source
core.schema_completeEvery graded JSON-LD type carries all of its required propertiesSource
corpus.broken_linksNo sampled same-site link returned 404 or 410Source
amp.canonicalA canonical declaration is present and structurally valid (HTTP(S) target, in head, no conflicting targets)Source
amp.open_graphThe Open Graph required properties og:title, og:type, og:image and og:url are present and nonemptySource
hyg.httpsFinal fetched URL uses HTTPSSource
hyg.mixed_contentNo HTTP resource references in the inspected HTML attributes of an HTTPS pageSource
hyg.image_dimensionsEvery inspected img element declares both width and height attributesSource
hyg.viewportA meta viewport element with nonempty content is presentSource
hyg.not_foundThe deliberately missing URL probe returned 404 or 410Source
gate.robots_qualityrobots.txt, when present, is under 500 KiB, has no noindex lines and only absolute Sitemap URLsSource
hyg.charset_conflictCaptured HTTP and HTML character encodings agreeSource
hyg.schema_syntaxEvery captured application/ld+json block parses as strict JSONSource
sec.form_action_httpsInspected declarative form destinations resolve to HTTPSSource
sec.tls_certCaptured TLS handshake verified the certificateSource
sec.tls_protocolCaptured handshake negotiated TLS 1.2 or 1.3Source
a11y.langThe parsed html element declares a nonempty languageSource
a11y.img_altEvery inspected img element has an alt attributeSource
a11y.page_titleExactly one nonempty document title in the parsed headSource
a11y.iframe_titleEvery inspected iframe has a nonempty title attributeSource

Observations and heuristics, excluded from scores

These detectors can support investigation. Their legacy statuses and priority weights do not enter new scores. A documented concept alone does not validate a detector, its applicability or a ranking effect.

CheckObservationScoring
gate.ai_bot_accessAI crawler accessExcluded
gate.bot_reachabilityFirewall and CDN bot accessExcluded
gate.renders_no_jsContent without JavaScriptExcluded
core.structured_dataStructured data (JSON-LD)Excluded
core.answer_blockOpening paragraph observationsExcluded
core.content_depthExtracted text lengthExcluded
core.mobile_parityMobile and desktop parityExcluded
core.llms_txtllms.txt fileExcluded
core.entity_consistencyBusiness identity markupExcluded
corpus.unique_titlesUnique page titlesExcluded
corpus.unique_metaUnique meta descriptionsExcluded
corpus.duplicate_contentDuplicate content across pagesExcluded
corpus.internal_linksInternal linksExcluded
corpus.anchor_textLink anchor textExcluded
amp.question_headersQuestion-heading observationsExcluded
amp.snippet_eligibleAI Overviews eligibilityExcluded
amp.heading_orderHeading orderExcluded
amp.hreflangLanguage targeting (hreflang)Excluded
amp.author_bylineAuthor bylineExcluded
amp.freshnessHonest datesExcluded
amp.indexnowIndexNow keyExcluded
amp.field_cwvReal-user speed dataExcluded
corpus.hreflang_reciprocityhreflang return linksExcluded
corpus.link_depthClick depthExcluded
hyg.redirectsRedirectsExcluded
hyg.page_weightPage speed basicsExcluded
hyg.img_altImage alt textExcluded
hyg.html_langPage languageExcluded
hyg.host_consistencyOne site addressExcluded
hyg.soft_404Soft 404 pagesExcluded
hyg.custom_404Helpful 404 pageExcluded
core.topic_targetTopic targetingExcluded
core.geo_targetService + place targetingExcluded
core.nap_consistencyBusiness identity (NAP) consistencyExcluded
core.local_schemaLocal business structured dataExcluded
corpus.site_structureSite structure (pages that can rank)Excluded
amp.service_pagesService page coverageExcluded
amp.location_pagesLocation pages vs doorway riskExcluded
core.canonical_conflictsCanonical signal conflictsExcluded
corpus.canonical_targetsCanonical target healthExcluded
gate.sitemap_qualitySitemap qualityExcluded
corpus.sitemap_hygieneSitemap vs crawl hygieneExcluded
hyg.head_validityHead section integrityExcluded
hyg.url_structureURL structureExcluded
corpus.link_qualityInternal link qualityExcluded
hyg.redirect_qualityRedirect techniqueExcluded
core.trust_pagesReal-business trust pagesExcluded
hyg.keyword_stuffingKeyword stuffingExcluded
hyg.hidden_textHidden textExcluded
corpus.near_duplicateNear-duplicate pagesExcluded
hyg.placeholder_textPlaceholder contentExcluded
core.answer_positionParagraph placement observationsExcluded
amp.semantic_tablesTable and list observationsExcluded
amp.title_rewrite_riskTitle rewrite riskExcluded
hyg.faviconFaviconExcluded
amp.site_nameSite name markupExcluded
hyg.server_responseServer response and compressionExcluded
hyg.folklore_flagsSEO folklore on this siteExcluded
hyg.hstsHSTS header (security signal)Excluded
hyg.nosniffX-Content-Type-Options (security signal)Excluded
hyg.referrer_policyReferrer-Policy header (privacy signal)Excluded
hyg.clickjackingClickjacking protection (security signal)Excluded
hyg.cspContent-Security-Policy (security signal)Excluded
core.ai_bot_matrixAI bot policy matrixExcluded
core.train_vs_retrieveAI crawler posture (train vs retrieve)Excluded
amp.llms_full_txtllms-full.txt referenceExcluded
amp.citable_factsNumbers and outbound linksExcluded
amp.passage_structurePassage structure observationsExcluded
amp.og_image_validSocial preview image (og:image)Excluded
hyg.twitter_cardX (Twitter) card tags (preview signal)Excluded
hyg.meta_charsetCharset declaration positionExcluded
hyg.multiple_titlesTitle element placementExcluded
hyg.base_hrefBase URL overrideExcluded
amp.robots_directivesRobots directive conflicts and noarchiveExcluded
corpus.orphan_pagesOrphan pages (sitemap vs internal links)Excluded
corpus.redirected_internal_linksRedirected internal linksExcluded
corpus.url_case_consistencyURL case and trailing-slash consistencyExcluded
hyg.js_navigationCrawlable navigation linksExcluded
hyg.iframe_main_contentMain content inside iframesExcluded
corpus.crawl_trapsCrawl traps (parameter and calendar URL explosion)Excluded
corpus.sitemap_lastmodSitemap lastmod accuracyExcluded
hyg.feed_discoveryRSS/Atom feed (syndication signal)Excluded
hyg.target_blank_noopenerNew-tab link rel=noopener (security etiquette)Excluded
core.tel_clicktapTap-to-call phone linkExcluded
core.hours_markupOpening hours in structured dataExcluded
core.geo_coordinatesMap-pin data (geo or full address)Excluded
hyg.map_presenceEmbedded map (convenience signal)Excluded
core.schema_visible_parityStructured data matches the visible pageExcluded
hyg.img_lazy_strategyImage lazy-loading strategyExcluded
hyg.img_responsiveResponsive imagesExcluded
hyg.img_formatsModern image formatsExcluded
hyg.render_blocking_scriptsRender-blocking scriptsExcluded
hyg.dom_sizePage complexity (DOM size)Excluded
hyg.third_party_scriptsThird-party scriptsExcluded
hyg.font_deliveryFont deliveryExcluded
hyg.heavy_embedsHeavy embedsExcluded
hyg.inline_data_urisInline image payloadsExcluded
hyg.preconnect_hintsEarly connection hints (performance signal)Excluded
amp.schema_breadcrumbBreadcrumb markup validityExcluded
amp.schema_articleArticle markup qualityExcluded
amp.schema_productProduct markup qualityExcluded
amp.schema_merchant_fieldsMerchant listing fieldsExcluded
amp.schema_faqFAQ markup structureExcluded
hyg.schema_howto_deprecatedHowTo markup (retired rich result)Excluded
amp.schema_person_authorAuthor markup qualityExcluded
core.schema_review_integritySelf-serving review markupExcluded
amp.schema_videoVideo markupExcluded
amp.schema_dates_consistencySchema date consistencyExcluded
hyg.cookie_flagsCookie flags (security signal)Excluded
hyg.permissions_policyPermissions-Policy header (privacy signal)Excluded
hyg.coop_corpCross-origin isolation headers (security signal)Excluded
hyg.server_version_leakServer version disclosure (security signal)Excluded
hyg.sri_third_partySubresource Integrity on third-party scripts (security signal)Excluded
hyg.cache_control_htmlCache-Control on the HTML document (delivery signal)Excluded
amp.homepage_proofHomepage proof sentenceExcluded
amp.content_stalenessContent age (18-month staleness)Excluded
corpus.city_swapCity-swapped template pagesExcluded
hyg.local_folkloreLocal SEO folklore (keyword domains, stuffed names)Excluded
corpus.service_dead_endsService pages without a next step (conversion signal)Excluded
amp.qa_coverageQ&A markup coverage on question pages (answer-engine signal)Excluded
hyg.offsite_profilesOff-Google platform links (discovery signal)Excluded
sec.secrets_exposedExposed secret keys in page sourceExcluded
sec.source_mapsPublished source mapsExcluded
sec.vuln_libsOutdated libraries with known CVEsExcluded
sec.https_redirectHTTP redirects to HTTPSExcluded
sec.hstsHSTS (Strict-Transport-Security)Excluded
sec.cspContent-Security-PolicyExcluded
sec.clickjackingClickjacking protectionExcluded
sec.nosniffX-Content-Type-Options: nosniffExcluded
sec.referrer_policyReferrer-PolicyExcluded
sec.permissions_policyPermissions-PolicyExcluded
sec.cors_wildcardCORS not overly permissiveExcluded
sec.server_tokensServer version not disclosedExcluded
sec.cookie_flagsCookie security flagsExcluded
sec.security_txtsecurity.txt (RFC 9116)Excluded
sec.dotenv_exposed.env file not exposedExcluded
sec.git_exposed.git folder not exposedExcluded
sec.spfSPF email-authentication recordExcluded
sec.dmarcDMARC email-authentication recordExcluded
sec.sriSubresource Integrity on third-party scriptsExcluded
sec.exposed_filesNo exposed backup/config artifactsExcluded
a11y.form_labelsForm fields labeled (WCAG 1.3.1/3.3.2)Excluded
a11y.heading_orderHeading levels not skipped (WCAG 1.3.1)Excluded
a11y.link_nameLinks have discernible text (WCAG 2.4.4)Excluded
a11y.button_nameButtons have accessible names (WCAG 4.1.2)Excluded
a11y.viewport_zoomZoom not disabled (WCAG 1.4.4/1.4.10)Excluded
a11y.landmarksMain landmark present (WCAG 1.3.1/2.4.1)Excluded
a11y.skip_linkSkip-to-content link (WCAG 2.4.1)Excluded
a11y.tabindex_positiveNo positive tabindex (WCAG 2.4.3)Excluded
a11y.autoplay_mediaNo uncontrolled autoplay (WCAG 1.4.2)Excluded
a11y.video_captionsVideo captions track (WCAG 1.2.2)Excluded
a11y.table_headersData tables have headers (WCAG 1.3.1)Excluded
a11y.duplicate_idUnique element ids (legacy WCAG 4.1.1)Excluded
a11y.aria_misuseARIA used correctly (WCAG 4.1.2)Excluded
a11y.alt_qualityAlt text is meaningful (WCAG 1.1.1)Excluded
priv.policy_linkPrivacy policy linked (GDPR/CCPA)Excluded
priv.cookie_consentCookie consent when tracking (ePrivacy)Excluded
priv.trackersThird-party trackers disclosedExcluded
priv.google_fonts_cdnGoogle Fonts self-hosted (GDPR)Excluded
priv.preconsent_cookiesNo tracking cookies before consent (ePrivacy)Excluded
priv.embed_leaksNo IP-leaking third-party embeds (GDPR)Excluded
priv.policy_contentPrivacy policy has substance (GDPR Art. 13/14)Excluded

Start with your page