Skip to content
Contact

Ruescan signal glossary

By · Published · Updated · Scoring version 2.5

How to read an entry

Each entry has three lines: what it measures, why it matters, how to fix it. The label tells the type of signal.

  • IssueA measured gap or error.
  • Possible issueMay be an error depending on context.
  • OpportunityNot a gap; adding it brings a gain.
  • Information, not scoredNoted, but not scored and not a finding.

Each entry carries an evidence label. "Observed" means the measurement was seen directly in HTTP, DNS or HTML. "Inferred" means the result rests on a heuristic rule or on context; it is not counted as a certain error.

AI access and readability

26 signals: 22 explained here, 4 unique to Ruescan.

OAI-SearchBot access

AI-01IssueObserved
What it measures
robots.txt lets OAI-SearchBot read the home page.
Why it matters
OAI-SearchBot is the bot ChatGPT search uses to read sites while answering. If it is blocked, the site may not appear as a source in those answers.
How to fix it
Remove the block for OAI-SearchBot in robots.txt: add Allow: / to a User-agent: OAI-SearchBot group or delete the Disallow: / line that covers it. Republish robots.txt afterwards.

Guide: Robots.txt for AI bots: who to allowSource: platform.openai.com

Claude-SearchBot access

AI-02IssueObserved
What it measures
robots.txt lets Claude-SearchBot read the home page.
Why it matters
Claude-SearchBot is the bot Claude uses to read sites while answering. If it is blocked, the site may not appear as a source in those answers.
How to fix it
Remove the block for Claude-SearchBot in robots.txt: add Allow: / to a User-agent: Claude-SearchBot group or delete the Disallow: / line that covers it. Republish robots.txt afterwards.

Guide: Robots.txt for AI bots: who to allowSource: www.rfc-editor.org

PerplexityBot access

AI-03IssueObserved
What it measures
robots.txt lets PerplexityBot read the home page.
Why it matters
PerplexityBot is the bot Perplexity uses to read sites while answering. If it is blocked, the site may not appear as a source in those answers.
How to fix it
Remove the block for PerplexityBot in robots.txt: add Allow: / to a User-agent: PerplexityBot group or delete the Disallow: / line that covers it. Republish robots.txt afterwards.

Guide: Robots.txt for AI bots: who to allowSource: www.rfc-editor.org

AI bots that fetch pages for a user

AI-04IssueObserved
What it measures
ChatGPT-User, Claude-User and Perplexity-User are not blocked in robots.txt.
Why it matters
These bots come when a user asks ChatGPT, Claude or Perplexity to open the page. If they are blocked, the AI cannot read it.
How to fix it
Remove Disallow: / lines for ChatGPT-User, Claude-User and Perplexity-User in robots.txt; these bots only come when a user asks for the page.

Guide: Robots.txt for AI bots: who to allowSource: platform.openai.com

Training bot status

AI-05Possible issueInferred
What it measures
Training bots (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot) are not blocked; blocking can be a deliberate choice.
Why it matters
These bots collect content for model training. Blocking them can be deliberate; it does not switch off AI search answers directly, but it can limit how well models know the brand.
How to fix it
Decide first: if you do not want your content used for model training, the block is correct. If you do, remove the Disallow: / lines for GPTBot, ClaudeBot, Google-Extended, Applebot-Extended and CCBot.

Guide: Robots.txt for AI bots: who to allowSource: developers.google.com

Bot identity at the firewall

AI-06Information, not scoredObserved
What it measures
The home page opens when requested as GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot and ChatGPT-User (no firewall block by user agent).
Why it matters
A request from our server using a bot identity was blocked; the real bot may get a different result. So the result counts as not measured and does not affect the score. To verify: in your server or firewall log, check the status codes of requests from real bot IPs (GPTBot: openai.com/gptbot.json; OAI-SearchBot: openai.com/searchbot.json; ChatGPT-User: openai.com/chatgpt-user.json; PerplexityBot: perplexity.ai/perplexitybot.json).
How to fix it
Find the block on these bot identities in your firewall (WAF/CDN) logs. Let real bots through with IP verification (the IP ranges the bots publish); remove rules that block on the user-agent text alone.

Guide: Robots.txt for AI bots: who to allowSource: platform.openai.com

Tags that block quoting

AI-07IssueObserved
What it measures
No noai, noimageai, nosnippet or max-snippet:0 in meta robots or X-Robots-Tag.
Why it matters
These directives stop search engines and AI answers from quoting the page; it may not be usable as a source in answers.
How to fix it
Remove nosnippet, max-snippet:0, noai and noimageai from the meta robots tag and the X-Robots-Tag header (unless deliberate). If needed, hide only specific parts with data-nosnippet.

Source: developers.google.com

Text in the server HTML

AI-08IssueObserved
What it measures
Whether the HTML the server sends holds enough readable text.
Why it matters
Most AI bots do not run JavaScript. If the text loads later, they see an empty or partial page and find nothing to quote.
How to fix it
Send the main content as HTML from the server (SSR or static generation); do not load the text only via JavaScript. Put at least 300 words of on-topic text on the page.

Source: developers.google.com

Visible text ratio

AI-09Possible issueInferred
What it measures
The share of visible text in the HTML.
Why it matters
If most of the HTML is scripts, styles and markup, bots read many bytes to reach the text; the risk of truncation and slowness grows.
How to fix it
Move large inline script and style blocks into external files, reduce unused markup (extra divs, inline SVG) and add more visible text.

The llms.txt file

AI-11Information, not scoredObserved
What it measures
Whether the site has an llms.txt file (optional; no effect on Google Search).
Why it matters
llms.txt is an optional proposal (llmstxt.org). Google says such files are not needed for Google Search and will neither help nor harm. The one measured example is similar: in one site's two-month server log (Evil Martians, July 2026), only 37 of about 770 direct requests for llms.txt and llms-full.txt came from named AI assistants. That is a single site's data, not a general rule. Information only; it does not affect the score.
How to fix it
Optional: llms.txt is not needed for Google Search (Google: it will neither help nor harm). In the one measured example, AI assistants rarely requested this file (a single site's two-month log). If you still want it, publish /llms.txt at the root: # Brand name, > one-sentence summary, - [Page name](https://domain.com/path): short description lines under a ## Pages heading (format: llmstxt.org).

Guide: How AI answers pick which brands to name, and how we track it weeklySource: developers.google.com

The llms-full.txt file

AI-13Information, not scoredObserved
What it measures
Whether llms-full.txt exists (the site text in one file; optional).
Why it matters
llms-full.txt is optional. It has no effect on Google Search, and we have no measurement showing it raises citations (in the single-site log, named AI assistants rarely requested it). Information only; it does not affect the score.
How to fix it
Optional: publish the plain text (Markdown) of key pages in a single /llms-full.txt file; not needed for Google Search, and no measurement shows it raises citations. Regenerate it when content changes.

Source: developers.google.com

Content-Signal line

AI-14Information, not scoredObserved
What it measures
A Content-Signal line in robots.txt (search, ai-input, ai-train preference).
Why it matters
Content-Signal states whether content may be used for search, AI answers and model training (a Cloudflare proposal). Draft standard: it is not yet clear that major AI crawlers honour it, so it is shown as information only and does not affect the score.
How to fix it
Add a line stating your preference to the User-agent: * group in robots.txt, e.g. Content-Signal: search=yes, ai-input=yes, ai-train=no.

robots.txt server errors

AI-15IssueObserved
What it measures
robots.txt does not return a server error (5xx).
Why it matters
Under the standard (RFC 9309), bots treat the whole site as off-limits while robots.txt returns a server error.
How to fix it
Find in server logs why the robots.txt request returns 5xx and fix it; the file must return 200. A 5xx robots.txt makes bots stop crawling the site.

Source: www.rfc-editor.org

robots.txt size and syntax

AI-16Possible issueInferred
What it measures
Whether robots.txt is a reasonable size with no unknown directives or broken lines.
Why it matters
Google reads only the first 500 KiB of robots.txt and ignores unknown or broken lines. A typo can mean the intended rule is not applied.
How to fix it
Keep robots.txt under 500 KiB; use only User-agent, Allow, Disallow, Sitemap (and optionally Content-Signal); delete lines without a colon or with unknown directives.

Source: developers.google.com

The robots.txt file

AI-18OpportunityInferred
What it measures
robots.txt exists at the root.
Why it matters
Bots can still crawl everything, but the easiest way to state AI bot preferences and point to the sitemap is unused.
How to fix it
Create /robots.txt at the root (plain text, 200): User-agent: * / Allow: / / Sitemap: https://domain.com/sitemap.xml.

Guide: Robots.txt for AI bots: who to allowSource: developers.google.com

Bingbot access

AI-24IssueObserved
What it measures
robots.txt lets Bingbot read the home page.
Why it matters
Bing's index is used by Copilot and among ChatGPT search sources. If Bingbot is blocked, the site may not appear as a source in those answers.
How to fix it
Remove the block for Bingbot in robots.txt: add Allow: / to a User-agent: Bingbot group or delete the Disallow: / line that covers it.

Source: www.rfc-editor.org

Decisions for other AI bots

AI-25Information, not scoredObserved
What it measures
The robots.txt decision for Applebot, Meta-ExternalAgent, Amazonbot, DuckAssistBot, MistralAI-User and OAI-AdsBot (allowed, blocked, unspecified) is noted.
Why it matters
Siri and Spotlight (Applebot), Meta AI (Meta-ExternalAgent), Alexa (Amazonbot), DuckDuckGo answers (DuckAssistBot) and Mistral (MistralAI-User) read sites with their own bots. If you blocked them on purpose, that is fine; if not, you may not appear as a source in those answers. OAI-AdsBot is different: it only checks pages submitted as ads on ChatGPT and is not used for training; if you do not run ads it does not concern you. Information only; it does not affect the score.
How to fix it
Information only. If you want these bots (Applebot, Meta-ExternalAgent, Amazonbot, DuckAssistBot, MistralAI-User) to use you as a source in answers, add Allow: / to a User-agent: <bot name> group or delete the Disallow: / line that covers them. If you do not, the block is correct. OAI-AdsBot is not a source in answers; it matters only if you run ads on ChatGPT.

Image address only through JavaScript

AI-26Possible issueInferred
What it measures
Whether the raw HTML holds the image addresses or they sit only in an attribute such as data-src.
Why it matters
Most AI crawlers do not run JavaScript. If src is empty or a placeholder in the raw HTML and the real address sits in data-src, that image does not exist for them; its alt text and context are lost too. A <noscript> fallback or srcset fixes it.
How to fix it
Fill src with the real address on important images (do not leave it only in data-src) and use the browser's own loading="lazy": <img src="/product.jpg" loading="lazy" width="600" height="400" alt="...">. If you use a lazy-load library, add a <noscript><img src="/product.jpg" alt="..."></noscript> fallback to each image.

Source: developers.google.com

Do subdomain robots.txt files block AI search bots

AI-27Information, not scoredObserved
What it measures
Whether the robots.txt of subdomains linked from the home page (such as blog or docs) blocks OAI-SearchBot, Claude-SearchBot and PerplexityBot; a difference is shown for bots the main domain allows. Information only.
Why it matters
Each subdomain's robots.txt applies only to itself. If the main domain is open but the blog or docs subdomain is closed, that content may not appear as a source in AI answers. If you closed it on purpose, that is fine. Information only; it does not affect the score.
How to fix it
Information only. If a subdomain (blog, docs, etc.) blocks OAI-SearchBot, Claude-SearchBot or PerplexityBot in its own robots.txt and you want that content to appear in AI answers, add the same User-agent blocks as the main domain to that subdomain's /robots.txt. If the block is deliberate, do nothing.

Source: developers.google.com

Crawl-delay for Bing

AI-28Information, not scoredObserved
What it measures
Whether robots.txt sets a high Crawl-delay for Bingbot (or for all bots if none is named).
Why it matters
Bing obeys Crawl-delay and with a high value crawls very few pages a day. Because ChatGPT search relies on the Bing index, a slowly crawled site can appear late and incompletely in AI search. Google ignores this line. Information only; it does not affect the score.
How to fix it
Remove the "Crawl-delay" line from robots.txt or lower it to 1-2 s. Setting Bing's crawl rate in Bing Webmaster Tools is safer.

Links in the raw HTML

AI-30Information, not scoredObserved
What it measures
Whether most links of the rendered page are also in the raw HTML (bots that do not run JavaScript see only the raw HTML).
Why it matters
Bots that do not run JS, and most AI crawlers, see only links in the raw HTML; if menus and internal links are JS-rendered, discovery suffers. Information only; it does not affect the score.
How to fix it
Information only. Provide the menu and internal links as real <a href> in the server-sent HTML (server-side rendering or prerendering); do not add links only with JavaScript.

Source: developers.google.com

Raw and rendered H1 agree

AI-31Information, not scoredObserved
What it measures
Whether the H1 in the raw HTML and the H1 in the rendered page say the same thing.
Why it matters
Bots that do not run JS, and AI crawlers, read the main heading from the raw HTML; a heading that changes after rendering leads to wrong topic inference. Information only; it does not affect the score.
How to fix it
Information only. Put the main heading (H1) in the server-sent HTML and do not let JavaScript replace it with different text later; the rendered heading should say the same topic as the one in the raw HTML.

Source: developers.google.com

The 4 unique signals in this category are not detailed.

Brand brain: identity and entity

22 signals: 19 explained here, 3 unique to Ruescan.

Identity schema (Organization)

BEY-01IssueObserved
What it measures
Organization, LocalBusiness or Person JSON-LD exists.
Why it matters
An identity schema states the brand name, logo, address and accounts in one machine-readable place. AI systems recognize the brand from it.
How to fix it
Add Organization (or a fitting subtype) JSON-LD to the home page: {"@context":"https://schema.org","@type":"Organization","name":"…","url":"https://domain.com/","logo":"https://domain.com/logo.png","sameAs":[…]}.

Source: developers.google.com

Persistent identity (@id)

BEY-02OpportunityInferred
What it measures
The identity node has a stable @id and @id references on the page resolve.
Why it matters
@id lets every page and schema point to the same entity by one name, so AI systems connect the pieces to one brand.
How to fix it
Give the identity node a stable @id (e.g. https://domain.com/#organization) and reference that same @id from other nodes (WebSite publisher, Article author).

Source: developers.google.com

Brand name consistency

BEY-03IssueObserved
What it measures
The brand name matches across title, og:site_name, JSON-LD name and the llms.txt title.
Why it matters
AI systems recognize a brand by its name. If the name differs between title, schema and sharing tags, they may not see one entity.
How to fix it
Write the brand name the same everywhere: title, og:site_name, JSON-LD name and the llms.txt heading. Add alternateName to the WebSite schema if needed.

Source: developers.google.com

Brand name distinctiveness

BEY-20Information, not scoredInferred
What it measures
Whether the brand name consists only of common words.
Why it matters
If the brand name is made of common words, branded searches may be read as topic searches. Add alternateName to the WebSite schema and track branded queries separately in Search Console. Information only; it does not affect the score.
How to fix it
Information only. Add alternateName to the WebSite schema and track branded queries separately in Search Console.

Logo in the schema

BEY-04IssueObserved
What it measures
The logo URL in the schema opens and returns an image.
Why it matters
Search engines and AI systems show this logo on the brand card; a logo that does not open is ignored.
How to fix it
Replace the schema logo with an absolute https image URL that opens (at least 112×112 pixels is recommended).

Source: developers.google.com

Official profiles (sameAs)

BEY-05IssueObserved
What it measures
Whether the identity schema lists the brand's official profiles (sameAs).
Why it matters
sameAs ties the brand's social accounts, Wikipedia/Wikidata entries and profiles to one entity and helps AI systems recognize it.
How to fix it
Add the brand's official profiles to the identity schema in a sameAs array (LinkedIn, Instagram, X, YouTube, Wikipedia/Wikidata…); at least 3 URLs.

Source: schema.org

About page

BEY-08IssueObserved
What it measures
The home page links to an About page and it opens.
Why it matters
An About page says who the brand is, what it does and who stands behind it; AI answers and trust signals draw on it.
How to fix it
Put an "About us" link in the home page menu or footer; the page should return 200 and describe the brand, founders and contact.

Contact signal

BEY-09IssueObserved
What it measures
A contact signal: a contact page link, a tel:/mailto: link, or an address/phone in the schema.
Why it matters
A reachable contact route signals a real business; AI answers use it for "how do I reach them". Note: numbers and addresses are not stored, only presence is checked.
How to fix it
Add a contact page link or a tel:/mailto: link to the home page; add address, telephone or contactPoint to the schema.

Source: developers.google.com

Meta and schema description match

BEY-10Possible issueInferred
What it measures
Whether the meta description and the schema description say the same thing.
Why it matters
If the two descriptions say different things, AI systems may summarize what the brand does inconsistently.
How to fix it
Write the meta description and the schema description around the same core message (same key words, same promise).

Founder and author entity

BEY-11OpportunityInferred
What it measures
A founder, author or person entity (founder, author, Person) is defined.
Why it matters
Founder or author information is an expertise and trust (E-E-A-T) signal; AI answers use it for "who is behind this".
How to fix it
Add the person behind the brand to the schema: a Person node as founder on the Organization or author on content (name, optional sameAs).

Source: schema.org

Service area and expertise

BEY-12OpportunityInferred
What it measures
Whether the identity schema carries service area, expertise and offers (areaServed, knowsAbout, makesOffer).
Why it matters
These fields say what the brand offers, where and to whom, so AI systems connect it to the right questions.
How to fix it
Add at least two of areaServed (service area), knowsAbout (expertise topics) and makesOffer/hasOfferCatalog (offers) to the identity schema.

Source: schema.org

Brand definition sentence

BEY-13Possible issueInferred
What it measures
The first two paragraphs contain a definition sentence that names the brand.
Why it matters
AI answers to "what is X?" often quote the definition sentence near the top. A clear definition that names the brand makes that quote easy.
How to fix it
Put a sentence that defines the brand in the first or second paragraph: "Brand is a [type] that does [what] for [whom]."

Knowledge base page

BEY-15OpportunityInferred
What it measures
A knowledge base page exists: FAQ, help, docs or glossary (linked from the home page or in the sitemap).
Why it matters
Q&A and documentation pages are among the most quoted by AI answers; they offer brand knowledge in ready-to-quote form.
How to fix it
Create an FAQ, help or glossary page, link it from the home page and add it to the sitemap.

Social links and sameAs match

BEY-16OpportunityInferred
What it measures
Social profile links on the page are also listed in the schema sameAs.
Why it matters
When the visible profiles and the schema sameAs agree, AI systems can be sure those accounts belong to the brand.
How to fix it
Add the social profiles linked on the page to the schema sameAs array too (same URLs).

Source: schema.org

Local business address (PostalAddress)

BEY-21IssueObserved
What it measures
Whether the local business schema has its address as a PostalAddress (the address is not stored).
Why it matters
Maps and AI answers match a local business by its address. Without a PostalAddress (street, locality, region, country) in the schema the business may not show up in "near me" searches.
How to fix it
Add the address to the local business schema as a PostalAddress: "address": {"@type":"PostalAddress","streetAddress":"Street No","addressLocality":"District","addressRegion":"City","postalCode":"34000","addressCountry":"TR"}; show the same address on the page too.

Source: developers.google.com

Depth of the About page

BEY-24Information, not scoredObserved
What it measures
Whether the About page has enough text, with traces of a founding year, team and address. The text is not stored.
Why it matters
An About page says who the brand is, when and where it was founded and who stands behind it; AI answers and trust signals draw on it. A one or two sentence page does not do that. Note: only whether a founding year, team and address trace exist is kept, not the text. Information only; it does not affect the score.
How to fix it
Information only. Grow the About page to at least 150 words: when and why you were founded, the team (names and roles) and the address or place of work; put the same facts in Organization schema (foundingDate, address, founder).

Wikipedia or Wikidata link

BEY-22Information, not scoredObserved
What it measures
Whether the identity schema's sameAs list holds a Wikipedia or Wikidata URL. For small brands its absence is normal.
Why it matters
Wikipedia and Wikidata are the reference sources search engines and AI systems trust most to tie a brand to a single entity. Creating an artificial entry for a brand without one is not right; if an entry already exists, add it to sameAs. Information only; it does not affect the score.
How to fix it
Information only. If your brand already has a Wikipedia or Wikidata entry, add its URL to sameAs in the Organization schema. If not, do not create an artificial entry; only subjects with sourced, encyclopedic notability are accepted.

Source: developers.google.com

Legal name and official identifiers

BEY-23Information, not scoredObserved
What it measures
Whether the Organization schema has legalName and an official identifier such as vatID or taxID. Only the field's presence is stored.
Why it matters
Google treats fields such as vatID/taxID as an important trust signal for users (they can be looked up in public registries); legalName separates the registered legal name from the brand name. Add fields only where applicable. Never put a personal ID number for a sole proprietorship. Information only; it does not affect the score.
How to fix it
Information only. Add the registered legal name as legalName and an official identifier such as the tax number as vatID or taxID to the Organization schema. For a sole proprietorship, never write a personal ID number.

Source: developers.google.com

Trust and safety pages

GVN-01Information, not scoredInferred
What it measures
Whether privacy/KVKK, terms and company-information pages exist (returns and delivery for stores).
Why it matters
Privacy, terms, returns and company-information pages show users and search and AI systems that a real business stands behind the site.
How to fix it
Information only. Publish privacy/KVKK, terms and company-information (name, address, contact) pages and link them from the footer; if you run a store, add returns and delivery terms too.

The 3 unique signals in this category are not detailed.

Content and answer blocks

42 signals: 36 explained here, 6 unique to Ruescan.

A single H1

ICR-01IssueObserved
What it measures
Exactly one H1 heading.
Why it matters
The H1 is the first place that tells bots and readers what the page is about; a single, clear H1 makes the topic plain.
How to fix it
Keep a single H1 on the page: the heading stating the main topic. Turn the others into H2/H3.

Heading order

ICR-02Possible issueInferred
What it measures
Heading levels do not skip (H1 → H2 → H3).
Why it matters
The heading tree is the page's table of contents; skips make it harder for bots and screen readers to group sections.
How to fix it
Use headings in order: H2 after H1, H3 under H2; do not skip levels for looks (style size with CSS).

Question-style headings

ICR-03OpportunityInferred
What it measures
Whether some headings are phrased as questions ("what", "how", "?").
Why it matters
People ask AI questions. A question heading with a short answer right below is the easiest structure for answer engines to quote.
How to fix it
Turn the questions users ask into headings (e.g. "What is X?", "How do I …?"); at least two.

FAQ block

ICR-04OpportunityInferred
What it measures
An FAQ block: FAQPage schema or collapsible Q&A (details/summary).
Why it matters
An FAQ block offers short, self-contained answers; AI answers and search results use them directly.
How to fix it
Put frequently asked questions in a visible block (e.g. <details><summary>Question</summary>Answer</details>). FAQPage schema has not produced a rich result in Google since 7 May 2026 (its documentation was removed on 15 June 2026). It does no harm but do not invest new effort; the visible block is enough.

Guide: How AI answers pick which brands to name, and how we track it weeklySource: developers.google.com

Upfront answer

ICR-05OpportunityInferred
What it measures
Whether the first paragraph after the H1 names the topic and answers it directly.
Why it matters
Answer engines quote the short paragraph at the top that answers the heading directly. A clear opening that names the topic and carries facts (numbers, dates, names) raises the chance of being quoted.
How to fix it
Put a 25-150 word paragraph right under the H1 that answers the topic directly and mentions the H1's main concept.

Guide: How AI answers pick which brands to name, and how we track it weekly

Lists and tables

ICR-06OpportunityInferred
What it measures
The page has a list or table (quotable structure).
Why it matters
Lists and tables give steps, comparisons and features to AI answers in ready-made form.
How to fix it
Present comparisons, steps or features as lists (<ul>/<ol>) or tables (<table>).

Content freshness

ICR-07Possible issueInferred
What it measures
Whether the page shows a recent update date (dateModified or <time>).
Why it matters
AI answers and search engines prefer fresh sources; a machine-readable date says when the content was updated.
How to fix it
Update the content and show the date: <time datetime="2026-10-10">10 October 2026</time>; use dateModified in the schema.

Source: developers.google.com

Citing outside sources

ICR-09OpportunityInferred
What it measures
Whether the page links to another source as a citation (social networks do not count).
Why it matters
Content that cites sources is seen as more trustworthy; AI answers look for the basis of what they quote.
How to fix it
Link to at least one trustworthy external source (official body, research, standard) that supports your claims.

Fact density

ICR-10OpportunityInferred
What it measures
Whether the text carries enough concrete facts such as numbers, percentages, dates or amounts.
Why it matters
Sentences with concrete numbers and dates get quoted more in AI answers; vague statements do not.
How to fix it
Add concrete facts: numbers, percentages, dates, prices (at least one per 100 words). Use only verified figures.

Image alt text

ICR-11IssueObserved
What it measures
Every image has alt text.
Why it matters
An image without alt text tells screen readers and bots nothing. The first 50 images on the page are checked.
How to fix it
Give every meaningful image an alt that describes it; give purely decorative ones alt="".

Source: developers.google.com

Blog or guide freshness

ICR-14OpportunityInferred
What it measures
Whether a blog or guide section exists and was updated recently.
Why it matters
Regularly published guides grow the pool of sources AI answers can cite and show the brand's expertise.
How to fix it
Update the blog or guides regularly (a new or updated post at least every 90 days) and report it with lastmod in the sitemap.

Source: developers.google.com

Keyword consistency

ICR-15Possible issueInferred
What it measures
Whether the main concepts of the text also appear in the title, description and headings.
Why it matters
If the text covers one topic while the title and description use other words, search engines and AI systems may misread the topic.
How to fix it
Use the text's key concepts in the title, meta description and H1/H2 too (naturally, without stuffing).

Internal link anchors

ICR-16OpportunityInferred
What it measures
Whether internal link anchors describe the target (generic anchors such as "click here", very long anchors, the same anchor pointing to different targets).
Why it matters
Anchor text tells bots what the target page is. "Click here", or the same text pointing to different pages, erases that information.
How to fix it
Replace generic anchors like "click here" or "read more" with words describing the target; keep anchors under 10 words; do not use the same anchor for different pages.

Source: developers.google.com

Placeholder and duplicate text

ICR-17IssueInferred
What it measures
Whether there is placeholder text, duplicated paragraphs or overly long sentences.
Why it matters
Placeholder text looks unfinished; duplicated text and very long sentences tire both readers and AI summaries.
How to fix it
Delete placeholder text (lorem ipsum), merge duplicate paragraphs and split long sentences.

Readability

ICR-18OpportunityInferred
What it measures
Whether the share of long sentences hurts readability.
Why it matters
Short sentences are easy for readers and AI summaries; long ones get cut or lose meaning when quoted.
How to fix it
Split sentences over 20 words in two; bring the share of long sentences under 25%.

Sentence-opening variety

ICR-19OpportunityInferred
What it measures
Whether consecutive sentences start with the same word.
Why it matters
Consecutive sentences starting with the same word make text monotonous; readers and AI summaries read it as repetition.
How to fix it
Vary the openings of consecutive sentences that start with the same word.

Transition words

ICR-20OpportunityInferred
What it measures
Whether transition words (also, because, for example...) are used enough; Turkish and English.
Why it matters
Transition words make the link between sentences (cause, example, result) explicit, so readers and AI summaries can follow.
How to fix it
Use transition words that connect sentences ("also", "because", "for example", "therefore"); in about a third of sentences.

Title, H1 and og:title match

ICR-30Possible issueInferred
What it measures
Whether the <title>, the first H1 and og:title share words.
Why it matters
Google builds the title in search results from sources such as <title>, H1 and og:title. If they say different things, the title shown may be one you did not choose; shared links show yet another title.
How to fix it
Bring the three places to the same topic: <title>, the H1 and og:title should carry the same main phrase (adding the brand name to the title is fine). If you want a different slogan for sharing, still keep the main words.

Source: developers.google.com

Author page and Person schema

ICR-31OpportunityInferred
What it measures
Whether the article's author link goes to a working page and the author is defined as a Person.
Why it matters
A named author, a working author page and Person markup show readers, search engines and AI systems who the content comes from (an E-E-A-T practice). It is an opportunity: if missing the page does not drop from the index, only the trust signal is weak. Schema alone is not proven to raise citations.
How to fix it
Link the author's name to an author page in articles (<a href="/author/jane-doe" rel="author">Jane Doe</a>), make that page open and carry a short bio. Define the author as a Person in the schema: "author": {"@type":"Person","name":"Jane Doe","url":"https://domain.com/author/jane-doe","jobTitle":"Ceramics expert"}; add profile links with sameAs if you have them.

Source: developers.google.com

Section-by-section quotability

ICR-32OpportunityInferred
What it measures
Whether each H2/H3 section can be quoted on its own: length, naming the topic and not leaning on other sections. The report lists the three weakest sections.
Why it matters
AI answers quote a single section, not the whole page. A section should name its topic, not lean on another part with "this" or "above", and make sense on its own in 40-200 words.
How to fix it
Write each H2/H3 section so it can be read alone: name the topic in the first sentence ("Ceramic mug making…", not "This…"), finish in 40-200 words and remove references that lean on other sections such as "above/below". The report lists the three weakest sections.

Link density

ICR-33Possible issueInferred
What it measures
How much of the visible text is link text, and whether the page looks like a menu.
Why it matters
A page whose text is almost all links looks like a menu to AI crawlers and search engines; there is no plain text left to quote.
How to fix it
Add plain text to the home page beyond link lists: a few paragraphs on what the brand does and whom it serves. Shorten long menus and tag clouds.

Pricing, trial and integrations pages

ICR-39Information, not scoredObserved
What it measures
Whether a service or software site has the pages people look for when deciding: pricing, trial/demo and integrations. A heuristic check.
Why it matters
Someone about to buy first looks for pricing, a trial/demo and whether it works with their tools (integrations); AI answers quote these pages for such questions. If missing, no answer is found at decision time. There is no official threshold; this is a heuristic. Information only; it does not affect the score.
How to fix it
Information only. Open the pages people look for when deciding: pricing/plans (/pricing), trial or demo (/demo) and integrations (/integrations). Even if you do not publish prices, have a page explaining how to get a quote. This is a heuristic, not an official rule.

Case studies and references

ICR-40Information, not scoredObserved
What it measures
Whether a service or software site has a case study, references or customer reviews page. Absence is an observation, not a fault.
Why it matters
Case studies, references and customer reviews answer the buyer's "does anyone else use this" question; AI answers also look at them for trust. Not finding one is an observation, not a fault. Information only; it does not affect the score.
How to fix it
Information only. Add a page of real customer case studies, references or reviews (with permission and verifiable; never invent reviews) and link it from the home page. This is a heuristic.

Near-duplicate template pages

ICR-41Information, not scoredObserved
What it measures
Whether the text of sampled pages is almost identical (template pages where only a place or product name changes).
Why it matters
If template-built city, product or topic pages have almost identical text, Google may treat them as doorway pages or scaled low-value content; AI answers pick just one. Each page needs its own useful text. The page text includes menu/footer words, so short pages can look slightly more alike than they are. Information only; it does not affect the score.
How to fix it
Information only. Give each template-built page (city, product, topic) its own text, data and examples; merge or noindex pages where only the place name changes.

Source: developers.google.com

File-name alt texts

ICR-35Information, not scoredObserved
What it measures
Whether image alt texts look like file names given by a camera or software.
Why it matters
If the alt text is a file name such as "IMG_1234.jpg", screen readers and bots cannot learn what the image shows. Observation only; it does not affect the score.
How to fix it
Information only. Replace file-name alt texts ("IMG_1234.jpg", "image1") with a short phrase saying what the image shows: "Close-up of a blue-glazed ceramic mug". Leave alt="" only on purely decorative images.

Source: developers.google.com

Stock photo traces

ICR-42Information, not scoredObserved
What it measures
Whether image addresses show traces of known stock-photo sites. Observation only; no verdict on originality.
Why it matters
Stock images appear on other sites too; original images signal trust and distinctiveness. Using stock is not wrong. Does not affect the score.
How to fix it
Information only. Using stock images is not wrong; for the places that set you apart (product, team, premises, process) use your own photos. If you use stock images, keep their licence.

Stale year in headings

ICR-34Information, not scoredInferred
What it measures
Whether a year used with "best, guide, price" in the title, H1 or og:title is old and the page was not updated since.
Why it matters
Titles such as "Best of 2022" look stale when the content was not updated; readers and AI summaries pick fresher sources. Use a year only if the content was truly refreshed for it. The threshold is not official (heuristic); it does not affect the score.
How to fix it
Information only. If the year in the title is old, truly refresh the content and update the year, or drop the year from the title; after refreshing, update dateModified in the schema too.

rel marking on affiliate links

ICR-36Information, not scoredObserved
What it measures
Whether affiliate links are marked with rel="sponsored" or nofollow.
Why it matters
Google asks paid or affiliate links to be marked rel="sponsored"; unmarked links can count as a link scheme. Information only; it does not affect the score.
How to fix it
Information only. Add rel="sponsored nofollow" to affiliate links and add a short disclosure at the top of affiliate content.

Source: developers.google.com

Empty and repeated headings

ICR-37Information, not scoredObserved
What it measures
Whether there are empty H2/H3 headings or headings with the same text repeated many times.
Why it matters
An empty heading is a blank stop for screen readers; repeated headings such as "Details" do not tell sections apart and AI summaries mix them up. Information only; it does not affect the score.
How to fix it
Information only. Delete empty heading tags or put text in them; turn repeated headings such as "Details" into distinct headings that name the section topic.

Source: developer.mozilla.org

Header cells in tables

ICR-38Information, not scoredObserved
What it measures
Whether data tables have header cells (th).
Why it matters
Without header cells (th) a screen reader or AI cannot tell which value belongs to which column. Give layout tables role="presentation". Information only; it does not affect the score.
How to fix it
Information only. Mark the first row of data tables with <th scope="col">; give role="presentation" to tables used only for layout, or move to a CSS layout.

Source: www.w3.org

Comparison and alternatives pages

KRS-01Information, not scoredInferred
What it measures
Whether the site has comparison pages such as "X vs Y" and "X alternatives", and whether they are thorough enough.
Why it matters
AI answers quote comparison pages for "which is better" and "X alternatives" questions; without such pages the site is less likely to be quoted.
How to fix it
Information only. For the most-asked competitor comparisons, write "X vs Y" and "X alternatives" pages: an honest table, who each option suits and at least 300 words. Link them from the home page.

Release notes and compatibility

SRM-01Information, not scoredInferred
What it measures
Whether a software site has a current release-notes page and supported-system information.
Why it matters
Current version and supported-system information answers "is it still maintained, does it work on my system" for users and AI answers.
How to fix it
Information only. Publish a /changelog or release-notes page for your software; each entry should show the version number, date and supported systems. Add softwareVersion and operatingSystem to the schema.

FAQ coverage and quality

SSS-01Information, not scoredInferred
What it measures
Whether the FAQ has enough questions and substantial answers, and the schema questions are visible in the text.
Why it matters
Short, self-contained question-and-answer pairs are the form AI answers and search summaries quote most.
How to fix it
Information only. Write an FAQ section of at least five real customer questions; each answer should stand on its own, a few sentences long, and the questions in the schema should be visible on the page.

Content freshness and date reliability

TAZ-01Information, not scoredInferred
What it measures
Whether page dates are recent enough, and whether sitemap lastmod values have become unreliable by being stamped with the same day everywhere.
Why it matters
Current, accurately dated content affects crawl priority and which sources AI answers pick; every page looking updated the same day lowers trust in the dates.
How to fix it
Information only. Truly refresh old content and fix the visible and schema update date; in the sitemap update lastmod only when the page really changed, and do not stamp every URL with the same day.

Source: developers.google.com

Author expertise

YZR-01Information, not scoredInferred
What it measures
Whether articles carry the author name, Person identity, expertise statement and author-page link together.
Why it matters
A named author with stated expertise and a page shows readers and search and AI systems who the content comes from; this matters most in health, finance and legal topics.
How to fix it
Information only. Add the author name, a short expertise statement and an author-page link to articles; the author page should carry Person schema and real credentials (essential in health, finance and legal). Never invent an author.

The 6 unique signals in this category are not detailed.

Technical SEO

55 signals: 50 explained here, 5 unique to Ruescan.

Home page response

TEK-01IssueObserved
What it measures
The home page answers with success (2xx).
Why it matters
Search engines and AI bots do not index a page that returns an error, and the rest of the site is discovered from it.
How to fix it
Find in server logs why the home page answers with a non-2xx status (redirect end, 4xx/5xx) and make it return 200.

Source: developers.google.com

Indexability (noindex)

TEK-02IssueObserved
What it measures
The home page is indexable: no noindex in meta robots or X-Robots-Tag.
Why it matters
noindex tells search engines not to show the page; AI search will not use it as a source either.
How to fix it
Remove <meta name="robots" content="noindex"> and the X-Robots-Tag: noindex header from the home page (it may be left over from staging).

Source: developers.google.com

Canonical tag

TEK-03IssueObserved
What it measures
A rel="canonical" tag exists.
Why it matters
The page does not state its main address. If the same content opens at several addresses, a search engine may pick the wrong one.
How to fix it
Add the page's preferred address in <head>: <link rel="canonical" href="https://domain.com/">.

Source: developers.google.com

Canonical correctness

TEK-04Possible issueInferred
What it measures
The canonical points to the same domain and to the page itself, as an absolute URL (https://…).
Why it matters
If that is not intended, search engines index that address instead of this page.
How to fix it
Point the canonical to the page's own absolute URL: <link rel="canonical" href="https://domain.com/page"> (a full https address; not a relative path or http://). Point elsewhere only on true duplicates.

Source: developers.google.com

Title tag

TEK-05IssueObserved
What it measures
A non-empty <title> exists.
Why it matters
Search results and AI answers read the page name from the <title> tag.
How to fix it
Add a descriptive title in <head>: <title>Topic: short description | Brand</title>.

Source: developers.google.com

Title length

TEK-06IssueObserved
What it measures
Whether the title is short enough to show in a search result without being cut.
Why it matters
Google cuts the title at about 580 px on desktop. A very short title cannot say both what the page is and who the brand is.
How to fix it
Bring the title to 30-60 characters; put the key words first and the brand name last.

Source: developers.google.com

Meta description

TEK-07IssueObserved
What it measures
A meta description exists.
Why it matters
The short text in search results usually comes from this tag; without it, the search engine picks a snippet itself.
How to fix it
Add a meta description summarising the page: <meta name="description" content="…"> (120-160 characters).

Source: developers.google.com

Meta description length

TEK-08IssueObserved
What it measures
Whether the meta description fits a search result and still describes the page.
Why it matters
A short description leaves space unused; a long one gets cut. 120-160 characters says enough without being cut.
How to fix it
Bring the meta description to 120-160 characters; give the main message in the first sentence.

Source: developers.google.com

Sitemap presence

TEK-09IssueObserved
What it measures
A sitemap is found (Sitemap line in robots.txt or /sitemap.xml).
Why it matters
A sitemap tells bots which pages exist and when they changed.
How to fix it
Create an XML sitemap (/sitemap.xml) and add Sitemap: https://domain.com/sitemap.xml to robots.txt.

Source: developers.google.com

Sitemap validity

TEK-10IssueObserved
What it measures
The sitemap is valid XML (<urlset> or <sitemapindex>).
Why it matters
The address answers, but there is no <urlset> or <sitemapindex>. Bots will not recognize it as a sitemap.
How to fix it
Produce the sitemap as valid XML: root element <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> (or <sitemapindex>), content type application/xml.

Source: developers.google.com

URLs in the sitemap

TEK-11IssueObserved
What it measures
Whether the sitemap lists any URLs.
Why it matters
There is no <loc> in the sitemap, so it points bots to no pages.
How to fix it
Add the pages you want indexed to the sitemap as <url><loc>https://domain.com/path</loc></url>.

Source: developers.google.com

Sitemap lastmod

TEK-12IssueObserved
What it measures
Whether the URLs in the sitemap carry a <lastmod> date.
Why it matters
Dates help bots crawl changed pages first.
How to fix it
Add <lastmod>2026-10-10</lastmod> to each URL with the page's real last update date.

Source: developers.google.com

Sitemap line in robots.txt

TEK-13IssueObserved
What it measures
robots.txt has a Sitemap: line with an absolute (https://…) URL.
Why it matters
That line lets every bot find the sitemap on its own.
How to fix it
Add the sitemap's FULL (absolute) URL to robots.txt: Sitemap: https://domain.com/sitemap.xml. A relative line such as Sitemap: /sitemap.xml is not valid.

Source: developers.google.com

Custom 404 page

TEK-15IssueObserved
What it measures
A non-existent address returns 404 (or 410) with a custom error page.
Why it matters
If a missing page returns 200, search engines and bots treat empty pages as real content (soft 404). A custom 404 page guides visitors back.
How to fix it
Have the server return a 404 (or 410) status for missing URLs (not 200 or a redirect to the home page); show a custom 404 template with the site menu and search.

Source: developers.google.com

www and bare domain

TEK-16IssueObserved
What it measures
www and the bare domain resolve to one address (the other variant redirects or does not exist).
Why it matters
If both addresses open without redirecting, the same site is indexed twice and links and signals are split.
How to fix it
Pick either www or the bare domain; 301-redirect the other to it and make the canonical use the same variant.

Source: developers.google.com

Home page redirects

TEK-17IssueObserved
What it measures
Whether the home page is reached without a needless redirect chain.
Why it matters
Each redirect delays loading and spends the bots' crawl budget.
How to fix it
Point internal links and redirects straight at the final URL; reduce the chain to one 301 (e.g. http://domain.com → https://www.domain.com/ in one step).

Source: developers.google.com

Tracking parameters in internal links

TEK-19IssueObserved
What it measures
No tracking or session parameters (utm_, gclid, sessionid...) in internal links.
Why it matters
Parameterized internal links create many copies of the same page; bots waste time and signals are split.
How to fix it
Remove parameters like utm_, gclid, sessionid from internal links; track with your analytics tool's own method instead.

Source: developers.google.com

Internal links from the home page

TEK-21IssueObserved
What it measures
Whether the home page links to enough distinct inner pages.
Why it matters
Bots discover the rest of the site through home page links; with few links, important pages go unfound.
How to fix it
Give at least 10 distinct crawlable <a href> links from the home page to key sections and pages (menu, highlights, footer).

Source: developers.google.com

Content type (text/html)

TEK-22IssueObserved
What it measures
The home page is served as HTML (text/html).
Why it matters
Browsers and bots may not read a page served with the wrong type as HTML.
How to fix it
Serve the home page with the Content-Type: text/html; charset=utf-8 header.

Source: developer.mozilla.org

Charset in the HTTP header

TEK-23IssueObserved
What it measures
The character set is in the HTTP header (Content-Type: text/html; charset=utf-8).
Why it matters
A charset in the header lets browsers and bots decode the page correctly from the first byte and prevents broken characters.
How to fix it
Set the Content-Type: text/html; charset=utf-8 header for HTML responses in the server or CDN settings.

Source: developer.mozilla.org

Googlebot access

TEK-29IssueObserved
What it measures
robots.txt lets Googlebot read the home page.
Why it matters
If Googlebot is blocked, Google cannot crawl the site; pages are not refreshed in search and can drop out of results over time. It is usually a "Disallow: /" line left by mistake.
How to fix it
Remove the robots.txt line that blocks Googlebot: delete the Disallow: / line in the User-agent: Googlebot group (or the User-agent: * group that covers it), or add Allow: /. If the page is open but its style/script files are blocked (e.g. Disallow: /assets/), remove that line or add Allow: /assets/*.css and Allow: /assets/*.js.

Source: developers.google.com

Single canonical

TEK-30IssueObserved
What it measures
The page has a single canonical and it is inside <head>.
Why it matters
Google accepts a canonical only inside <head>; a tag in the body is ignored. If several canonicals point to different addresses, Google may ignore them.
How to fix it
Keep a single <link rel="canonical" href="…"> and put it inside <head>; remove canonical tags in the body or a second one with a different address (usually a plugin and theme clash).

Source: developers.google.com

Charset conflict

TEK-31Possible issueInferred
What it measures
Whether the meta charset and the HTTP header charset agree.
Why it matters
If the header and the meta tag name different character sets, the browser picks the header; if the page was written for the other one, accented characters can break.
How to fix it
Make the meta charset match the HTTP header (usually both UTF-8): <meta charset="utf-8"> and Content-Type: text/html; charset=utf-8.

Bing verification tag

TEK-34Information, not scoredObserved
What it measures
A Bing Webmaster verification tag (msvalidate.01) was seen.
Why it matters
The site has a Bing Webmaster Tools verification tag; it may be registered with Bing (a source for Copilot and ChatGPT search). Information only; it does not affect the score.
How to fix it
Information only; nothing to do.

Sitemap size limit

TEK-36IssueObserved
What it measures
Whether the sitemap file exceeds Google's size and URL limit.
Why it matters
Google accepts a single sitemap up to 50 MB (uncompressed) and 50,000 URLs; the rest is not processed. Large sites split the sitemap into parts and give a sitemap index.
How to fix it
Split the sitemap into parts: at most 50,000 URLs and 50 MB (uncompressed) per file; collect the parts in a sitemap index (<sitemapindex>) file and give the index address in robots.txt.

Source: developers.google.com

The max-image-preview directive

TEK-37OpportunityInferred
What it measures
Meta robots or X-Robots-Tag has max-image-preview:large.
Why it matters
Without it Google may show a default-size preview. For a large image preview (Discover included) the page should say "max-image-preview:large".
How to fix it
Add <meta name="robots" content="max-image-preview:large"> to the page (or send the same value in the X-Robots-Tag header). Remove max-image-preview:none or standard unless it is deliberate. The page should also have an image at least 1200 px wide.

Source: developers.google.com

HTTP canonical header

TEK-38IssueObserved
What it measures
Whether there is no HTTP Link: rel="canonical" header, or it names the same address as the HTML canonical.
Why it matters
The server header names one address as canonical and the page's <link rel="canonical"> another. Google says using both is error prone; a conflicting signal may be ignored and an address you did not choose may be picked. Pick one method.
How to fix it
Pick one method for canonical. On HTML pages <link rel="canonical"> is enough: remove the Link: <…>; rel="canonical" header on the server. If you keep the header, delete the HTML tag or point both to the same address.

Source: developers.google.com

Sitemap cache time

TEK-39Possible issueInferred
What it measures
Whether the sitemap cache time (CDN included) stays within a reasonable limit.
Why it matters
If the sitemap stays in cache for a long time, newly published pages reach search engines and AI crawlers late. Keep its Cache-Control short (e.g. max-age=3600) or purge the CDN cache when a page is added. The threshold is a heuristic.
How to fix it
Keep the sitemap Cache-Control short (e.g. max-age=3600) or purge the CDN cache when a page is added, so the CDN does not serve an old sitemap for days.

Source: developer.mozilla.org

Response on the first request

TEK-28Possible issueInferred
What it measures
Whether the home page answers successfully on the first request.
Why it matters
During the scan the home page first returned an error (e.g. 503 during a deploy). This may have been a brief outage, so the score is marked provisional. If it happens often, deploy without downtime or send Retry-After on the maintenance page.
How to fix it
Deploy without downtime (e.g. prepare the new version, then switch traffic); if you need a maintenance page, send 503 together with a Retry-After header.

Source: developers.google.com

Noindex pages in the sitemap

TEK-40IssueObserved
What it measures
Sampled sitemap pages have no noindex in meta robots or X-Robots-Tag.
Why it matters
A sitemap says "index this page"; if the page says noindex the signals conflict. Google will not index these addresses and Search Console reports "Submitted URL marked noindex". Either remove noindex from the page or remove the address from the sitemap.
How to fix it
For the noindex pages in the sitemap either remove noindex (meta robots and X-Robots-Tag) or remove the addresses from the sitemap. The sitemap should hold indexable pages only.

Source: developers.google.com

Pagination canonical

TEK-41IssueObserved
What it measures
Whether the canonical of paginated pages points to the page itself rather than to the first page.
Why it matters
If page 2, 3, 4... name page 1 as canonical, Google treats them as copies of page 1; products or posts on later pages may not be discovered or indexed. Each paginated page should be self-canonical (rel=next/prev is no longer used by Google).
How to fix it
On paginated pages (?page=2, /page/2/) point the canonical to the page's own address, not to page 1: <link rel="canonical" href="https://domain.com/blog?page=2">.

Source: developers.google.com

Canonical target opens

TEK-42IssueObserved
What it measures
Whether a canonical that points elsewhere opens normally, does not redirect and carries no noindex.
Why it matters
The canonical tells search engines "this is the main address". If that address does not open, is noindex or redirects elsewhere, search engines ignore the signal or quietly drop the page from the index. Some CDNs and security layers also redirect to the canonical target; a wrong canonical hides the page.
How to fix it
The address the canonical points to must open with 200, must not redirect and must not carry noindex. If the target is wrong, point the canonical to the page's own final (non-redirecting) address: <link rel="canonical" href="https://domain.com/page/">. Remove any "redirect to canonical" rule in your CDN or security layer.

Source: developers.google.com

Analytics tag loaded twice

TEK-43Possible issueInferred
What it measures
Whether each measurement ID is loaded once on the page and whether gtag.js and Tag Manager sit together.
Why it matters
If the same ID loads twice, every visit is counted twice: sessions, page views and conversions inflate, and reports and ad optimisation run on wrong data. If gtag.js and Tag Manager sit together, the container may also send the same GA4 ID (we cannot see inside the container), so this is flagged as "possible".
How to fix it
Load each measurement ID once per page. If you use Tag Manager, keep the GA4 tag inside the container only and remove the separate gtag.js file and the gtag config code from the page; if the container has no GA4 tag, do the opposite. Check: in Tag Assistant or the browser network tab only one page-view request should go out for the same ID.

Same lastmod day across the sitemap

TEK-44Possible issueInferred
What it measures
Whether nearly all dated sitemap URLs share one day; if so, lastmod may be auto-generated.
Why it matters
If every URL looks updated on the same day, the date may come from when the sitemap was generated rather than from a page change. Google uses lastmod only when it is consistent and accurate, so in that case crawl priority cannot use it. If the whole site really was republished that day, this is not an error.
How to fix it
lastmod should change only when the page really changes: the sitemap generator should not stamp today's date on every URL each time it runs; take the date from the page's last edit time (the CMS "updated" field). If you cannot keep real dates, omitting lastmod is better than giving every URL the same date.

Source: developers.google.com

Invalid element inside <head>

TEK-45IssueObserved
What it measures
Whether a non-metadata element inside head pushes the head tags after it into the body.
Why it matters
Browsers and Google close <head> at the first invalid element. Canonical, hreflang, robots or description tags after it fall into the body and Google may ignore them.
How to fix it
Keep only meta, link, title, style, script, base, noscript and template inside <head>. Move elements such as div, img, iframe or a (often left by a plugin or tracking code) into <body>, or put the canonical, hreflang and meta tags before them.

Source: developers.google.com

Links that go nowhere

TEK-46Possible issueInferred
What it measures
Whether links go to a real address, or are empty, "#" or javascript: links.
Why it matters
An href="#" or javascript: link is a dead end for search engines and AI crawlers; it carries no real address. Use a button element for things like opening a menu.
How to fix it
Turn href="#" and javascript: links into links with a real address; use a button element (type="button") for elements that only perform an action (open a menu, switch a tab).

Source: developers.google.com

http:// in internal links

TEK-47IssueObserved
What it measures
Whether internal links on an HTTPS site use http://.
Why it matters
An internal link given as http:// hits a redirect on every click and every bot visit; crawl budget is wasted and the canonical address signal weakens.
How to fix it
Use https:// or relative paths (/page) instead of http:// in links to your own pages; bulk-replace old addresses in menus, footers and the content editor.

tel: and mailto: syntax

TEK-48IssueObserved
What it measures
Whether tel: and mailto: links carry a valid number or email address (values are not stored).
Why it matters
A broken tel: link does not start a call and a broken mailto: does not open email. Visitors cannot get in touch, and AI and search engines cannot read the contact details.
How to fix it
Put only the number in international format in tel: links (href="tel:+902120000000"); mailto: links need a valid address (href="mailto:info@domain.com").

Development address (localhost)

TEK-49IssueObserved
What it measures
Whether a development address such as localhost or .local is left on the page.
Why it matters
A localhost or .local address only opens on the developer's computer. For visitors and bots the link, image or script is broken; in a canonical it names the wrong main address.
How to fix it
Replace localhost, 127.0.0.1 or .local/.test addresses with your live domain or a relative path; search the template and database for them before going live.

Boilerplate title and description

TEK-54Information, not scoredObserved
What it measures
Whether the title and meta description are leftover boilerplate such as "Home" or "Just another WordPress site".
Why it matters
Leftover text such as "Home" or "Just another WordPress site" does not say what the page is; the brand and topic are missing in search results and AI summaries. Information only; it does not affect the score.
How to fix it
Replace the home page title and meta description with your own wording that names the brand and what you do. Remove leftovers such as "Home" or "Just another WordPress site".

Duplicate tags and conflicting robots

TEK-55Information, not scoredObserved
What it measures
Whether the page has one title and one meta description, and whether robots directives conflict (index with noindex, follow with nofollow).
Why it matters
Google applies the most restrictive of conflicting robots directives, so a stray "noindex" or "nofollow" may be in effect. With two titles or descriptions it is unclear which is used (a plugin and the theme often both write the tag). Information only; it does not affect the score.
How to fix it
Let only one of the theme or SEO plugin write the title, description and robots tags; turn the other off. The source should have one <title>, one meta description, and no index/noindex or follow/nofollow together.

Links blocked with nofollow

TEK-56Information, not scoredObserved
What it measures
Whether the page has page-level nofollow, and whether many internal links carry rel="nofollow".
Why it matters
Page-level nofollow stops every link on the page from being followed; nofollow on internal links cuts link equity and the crawl path. Information only; it does not affect the score.
How to fix it
Turn off "nofollow" in the page settings or SEO plugin and remove rel="nofollow" from internal links (keep it only on user-generated or paid links).

Helpful links on the 404 page

TEK-57Information, not scoredObserved
What it measures
Whether, when a missing address returns 404, the page has enough links leading visitors to the home page or categories.
Why it matters
A visitor or bot that lands on a wrong address and finds no link to the home page, categories or search leaves the site. Information only; it does not affect the score.
How to fix it
Add links to the home page, main categories, popular pages and a search box on the 404 page; at least 3 links.

Internal search addresses closed in robots.txt

TEK-58Information, not scoredObserved
What it measures
Whether, if the site has a search form, search-result addresses are closed to Googlebot in robots.txt.
Why it matters
Every query the search form makes is its own address. If not closed, bots can crawl endless thin pages and spend crawl budget. Information only; it does not affect the score.
How to fix it
Close the search address in robots.txt: under "User-agent: *" add "Disallow: /search" and "Disallow: /*?s=" (use your own search path).

Sitemap pages blocked by robots.txt

TEK-59Information, not scoredObserved
What it measures
Whether addresses listed in the sitemap are blocked for Googlebot by robots.txt.
Why it matters
Listing a page in the sitemap while closing it in robots.txt means the bot cannot read it, so it never sees a noindex tag on it and the address can still be indexed. The two should agree. Information only; it does not affect the score.
How to fix it
Find which Disallow line blocks the sitemap pages. If the page should be indexed, remove the line; if not, drop it from the sitemap and use noindex (noindex is seen only when the bot can read the page).

Filter and session-parameter links

TEK-62Information, not scoredObserved
What it measures
Whether many internal links on the home page carry filter, sort or session parameters.
Why it matters
Every filter and sort combination becomes its own address; bots get lost in them and burn crawl budget, and a session id serves the same page at endless addresses. Information only; it does not affect the score.
How to fix it
Give filter, sort and session-parameter links a canonical and, where possible, close them in robots.txt (e.g. "Disallow: /*?*sort="); keep session ids in cookies, not in the address.

Open user-generated pages

TEK-60Information, not scoredObserved
What it measures
Whether sampled pages under profile, share, paste or forum paths are open without noindex. It gives no verdict, only a note.
Why it matters
Anyone can create profile, share, paste and forum pages; unmoderated they fill with spam, and Google's user-generated spam policy can affect the whole site. If open on purpose (a moderated forum), that is fine. Information only; it does not affect the score.
How to fix it
Information only. Public profile, share, paste or forum pages can attract spam if unmoderated. If you do not want them indexed, add <meta name="robots" content="noindex">; give user links rel="ugc nofollow"; if open on purpose, moderate the content.

Source: developers.google.com

Soft 404 pages

TEK-61Information, not scoredObserved
What it measures
Whether a page that says "not found" returns a success status instead of 404.
Why it matters
If a page says "not found" but the server returns 200 (success), Google treats it as a soft 404 and drops it from the index; crawl budget is wasted. A page that is really gone should return 404 or 410. Information only; it does not affect the score.
How to fix it
Information only. If a page that says "not found" returns 200, make the server return 404 (or 410 if removed for good); if the page really exists, show its real content. Put noindex on empty search-result pages.

Source: developers.google.com

Broken internal links

TEK-53Information, not scoredObserved
What it measures
Whether the first internal links on the home page return 404 or 410. Blocking responses are not counted as broken.
Why it matters
A broken internal link sends visitors and crawlers to an empty page, wastes crawl budget and makes the site look neglected. Only the first 10 links are tried. Information only; it does not affect the score.
How to fix it
Information only. Point the broken internal link to the right address; if the page is gone, 301-redirect it to the closest topic or remove the link. Check menu and footer links first.

Source: developers.google.com

Internal link depth

IBG-01Information, not scoredInferred
What it measures
Whether pages link to enough internal targets, are reachable in few clicks from the home page and have few broken internal links.
Why it matters
Internal links let crawlers and AI systems find pages and understand how topics relate; pages buried deep are crawled less.
How to fix it
Information only. Make important pages reachable within three clicks of the home page; link from each page to a few related inner pages with descriptive anchor text, and fix broken internal links.

Source: developers.google.com

The 5 unique signals in this category are not detailed.

Speed and code

44 signals.

PageSpeed mobile performance

KOD-01IssueObserved
What it measures
The Google PageSpeed mobile performance score.
Why it matters
Google PageSpeed (Lighthouse) mobile test. 90+ is good, 50-89 needs work, below 50 is poor. Visitors and bots abandon slow pages.
How to fix it
Start with the biggest wins in the PageSpeed report: shrink large images, defer render-blocking scripts (defer), remove unused JavaScript.

Source: web.dev

LCP: largest contentful paint

KOD-02IssueObserved
What it measures
LCP, the time the main content takes to appear, against Google's Core Web Vitals guidance.
Why it matters
Time until the largest element is on screen; one of the three Core Web Vitals Google uses in ranking.
How to fix it
Shrink and prioritise the LCP element (usually the large hero image): fetchpriority="high", a modern format (WebP/AVIF), no lazy loading; speed up the server response.

Source: web.dev

CLS: layout shift

KOD-03IssueObserved
What it measures
CLS, how much the layout shifts while loading, against Google's Core Web Vitals guidance.
Why it matters
How much elements move while loading; it causes mis-clicks and is one of Google's Core Web Vitals.
How to fix it
Give images, videos and ad slots width/height or aspect-ratio; do not insert content above existing content later; set font-display for fonts.

Source: web.dev

TBT: total blocking time

KOD-04IssueObserved
What it measures
TBT, the total time the main thread is blocked.
Why it matters
Heavy JavaScript locks the page while loading; taps and clicks lag.
How to fix it
Break up long JavaScript tasks, reduce or defer third-party scripts, remove unused code.

Source: web.dev

FCP: first contentful paint

KOD-05IssueObserved
What it measures
FCP, the time the first content takes to appear.
Why it matters
Visitors see the first thing on screen after this long; if it is long, the page feels empty.
How to fix it
Reduce render-blocking CSS/JS, inline critical CSS, shorten server response time.

Source: web.dev

Real-user data (CrUX)

KOD-06IssueObserved
What it measures
LCP, INP and CLS in real Chrome user data (CrUX). Without data the signal is not measured.
Why it matters
This is not a lab test; it comes from the site's real Chrome users, and Google uses it in ranking.
How to fix it
Focus on the poor real-user metric: speed up the hero image for LCP, break up long JS tasks for INP, give elements dimensions for CLS. Changes show up over 28 days.

Source: web.dev

Server response time (TTFB)

KOD-07IssueObserved
What it measures
How quickly the server sends its first response (TTFB).
Why it matters
A slow first response delays every page; bots crawl slow sites less. Measured from our server (Cloudflare).
How to fix it
Speed up the server response: enable page or CDN caching, fix slow database queries, serve from a region close to users.

Source: web.dev

Text compression

KOD-08IssueObserved
What it measures
Text compression (br, gzip or zstd) is on.
Why it matters
Compression usually shrinks HTML, CSS and JavaScript by about 70%, so pages reach visitors and bots faster.
How to fix it
Enable Brotli or gzip compression for text responses (HTML, CSS, JS, JSON) on the server or CDN.

Source: developer.mozilla.org

HTTP/3

KOD-09OpportunityInferred
What it measures
HTTP/3 is advertised (Alt-Svc: h3).
Why it matters
HTTP/3 speeds up connections, especially on mobile and lossy networks. Note: only the header is checked.
How to fix it
Enable HTTP/3 on the CDN or server (a single setting on most CDNs); the server should send an Alt-Svc: h3=":443" header.

HTML size

KOD-10Possible issueInferred
What it measures
The size of the home page HTML.
Why it matters
Large HTML (often inline scripts and styles) hits bots' read limits and delays first render.
How to fix it
Make the HTML smaller: move large inline scripts, styles and SVGs to external files and reduce large embedded JSON state.

Render-blocking scripts

KOD-11IssueObserved
What it measures
No external scripts in <head> without async or defer (render-blocking).
Why it matters
The browser does not draw the page until a blocking script in <head> is downloaded and run; first render is delayed.
How to fix it
Add defer (if order matters) or async to external scripts in <head>, or move them before </body>.

Render-blocking stylesheets

KOD-12IssueObserved
What it measures
How many stylesheets block rendering.
Why it matters
Each blocking CSS file delays first render by another request; fewer, combined files are faster.
How to fix it
Combine stylesheets, inline critical CSS and load non-critical ones later via media or rel="preload".

Third-party scripts

KOD-13Possible issueInferred
What it measures
How many third-party domains load scripts.
Why it matters
Each outside domain means another connection, more delay and a privacy risk; the page depends on others' servers.
How to fix it
Audit third-party scripts; remove unneeded ones and defer the rest, ideally through a single tag manager.

Image dimensions (width, height)

KOD-14IssueObserved
What it measures
Whether most images have width and height set.
Why it matters
An image without a known size makes the page shift when it loads (CLS); the browser cannot reserve space.
How to fix it
Write width and height with the real dimensions on every <img> (responsive sizing in CSS still works).

Source: web.dev

Lazy loading

KOD-15OpportunityInferred
What it measures
Whether images after the first few use loading="lazy".
Why it matters
Loading off-screen images later lightens the first load and saves mobile data.
How to fix it
Add loading="lazy" to images below the fold; do not add it to the first-screen (especially LCP) image.

Source: web.dev

Modern image formats

KOD-16OpportunityInferred
What it measures
Whether images use modern formats such as WebP or AVIF.
Why it matters
WebP and AVIF usually deliver the same image in a 25-50% smaller file.
How to fix it
Serve images as WebP or AVIF (with a <picture> fallback or via CDN image conversion).

Web font loading

KOD-17OpportunityInferred
What it measures
If a web font service is used, there is a preconnect or display=swap.
Why it matters
Preconnecting to the font server or using font-display: swap keeps text visible while fonts load.
How to fix it
Add <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> for the font service and append display=swap to the font URL.

Source: developer.mozilla.org

Cache lifetime

KOD-18IssueObserved
What it measures
Whether CSS and JS files are cached for a long time.
Why it matters
A long cache lifetime saves returning visitors and bots from downloading the same files again.
How to fix it
Serve versioned (content-hashed) CSS/JS files with Cache-Control: public, max-age=31536000, immutable.

Source: developer.mozilla.org

doctype, charset and viewport

KOD-19IssueObserved
What it measures
Whether the doctype comes first, the charset is declared early and a viewport tag exists.
Why it matters
Without viewport the page opens as a shrunken desktop page on phones (Google evaluates the phone view); doctype and an early charset make browsers read the page in the right mode and encoding.
How to fix it
Start the document with <!doctype html>; put <meta charset="utf-8"> and <meta name="viewport" content="width=device-width, initial-scale=1"> at the top of <head>.

PageSpeed accessibility

KOD-22IssueObserved
What it measures
The Google PageSpeed accessibility score.
Why it matters
An accessible page (contrast, labels, heading order) serves screen readers and bots alike.
How to fix it
Fix the items in the PageSpeed accessibility section: colour contrast, form labels, button and link names, image alt text.

PageSpeed SEO

KOD-23IssueObserved
What it measures
The Google PageSpeed SEO score.
Why it matters
Lighthouse's basic SEO checks (crawlability, title, description, link text) add up to this score.
How to fix it
Fix the items in the PageSpeed SEO section (title, meta description, crawlable links, valid robots.txt, hreflang).

PageSpeed best practices

KOD-24IssueObserved
What it measures
The Google PageSpeed best practices score.
Why it matters
Checks such as HTTPS, console errors, deprecated APIs and image ratios; browser warnings reduce trust.
How to fix it
Fix the items in the PageSpeed best practices section (console errors, HTTPS, outdated libraries, image aspect ratios).

Unused JavaScript

KOD-26IssueObserved
What it measures
How much unused JavaScript the page carries (Lighthouse).
Why it matters
Unused code is downloaded and parsed anyway, making the page needlessly heavy.
How to fix it
Remove unused JavaScript or code-split it so it loads only where needed; disable unused plugins.

HTML download time

KOD-28IssueObserved
What it measures
Whether the home page HTML downloads quickly.
Why it matters
Fetched from our server, the HTML took this long to complete. Slow HTML delays every page and bot crawling.
How to fix it
Shorten the full HTML download: serve the page from cache, make the HTML smaller, enable compression.

Source: web.dev

DOM size

KOD-29Possible issueInferred
What it measures
The number of DOM elements on the page (Lighthouse).
Why it matters
A large DOM raises memory use and render time; interactions slow down.
How to fix it
Reduce the DOM size: remove unnecessary wrapper divs, paginate or lazily render long lists.

Page weight

KOD-30Possible issueInferred
What it measures
Whether the total page weight stays within what Lighthouse accepts.
Why it matters
Heavy pages are slow and costly on mobile data; the resource breakdown is in the speed section.
How to fix it
Reduce total page weight: compress and resize images, remove unused JS/CSS and extra font weights.

JavaScript minification

KOD-31IssueObserved
What it measures
Whether JavaScript is minified (Lighthouse).
Why it matters
Minifying removes whitespace and comments so files download faster.
How to fix it
Minify JavaScript files at build time.

CSS minification

KOD-32IssueObserved
What it measures
Whether CSS is minified (Lighthouse).
Why it matters
Minified CSS downloads faster and holds up rendering less.
How to fix it
Minify CSS files at build time.

Image sizing

KOD-33IssueObserved
What it measures
Whether images are sized for the screen (Lighthouse).
Why it matters
Downloading images larger than shown on phones wastes data and time; srcset can serve the right size.
How to fix it
Offer screen-appropriate image variants with srcset and sizes; do not send images larger than they are displayed.

Skip to content link

KOD-34OpportunityInferred
What it measures
Whether the page starts with a "skip to content" link to the main content.
Why it matters
Keyboard and screen reader users must tab through the menu on every page. A "skip to content" link at the top takes them straight to the main content.
How to fix it
Add a "Skip to content" link to the main content as the first element of the body (href="#content"); give the main content container id="content". It may be visually hidden but must appear on keyboard focus.

Focus outline

KOD-35Possible issueInferred
What it measures
Whether the page's style blocks remove the keyboard focus outline, and if so whether a visible focus style replaces it.
Why it matters
People using a keyboard see where they are from the focus outline. If it is removed without a replacement, the site cannot be used with a keyboard.
How to fix it
Remove the outline: none / outline: 0 rule or add a visible focus style instead: :focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }. If you do not want the ring on mouse clicks, use :focus:not(:focus-visible) { outline: none }.

Source: developer.mozilla.org

Zoom on phones

KOD-36IssueObserved
What it measures
Whether the viewport tag disables zoom on phones (user-scalable=no or a low maximum-scale).
Why it matters
People with low vision pinch to enlarge text. user-scalable=no or maximum-scale=1 blocks this; Lighthouse also flags it as an accessibility error.
How to fix it
Remove user-scalable=no and maximum-scale=1 from the viewport tag: <meta name="viewport" content="width=device-width, initial-scale=1">.

Button name

KOD-37IssueObserved
What it measures
Whether buttons have a name a screen reader can read: text, aria-label, title or an image with alt.
Why it matters
A screen reader reads an icon-only button as just "button" and cannot say what it does. AI agents also recognise page buttons by their name.
How to fix it
Give every icon-only button a name: add aria-label="Open menu" to the button and aria-hidden="true" to the icon inside; use alt on image buttons and value on input type="button".

Source: developer.mozilla.org

Form field label

KOD-38IssueObserved
What it measures
Whether form fields are tied to a label (label, aria-label); a placeholder alone does not count.
Why it matters
A screen reader cannot say what goes into an unlabelled field; a placeholder disappears once typing starts. AI agents filling the form also recognise fields by their label.
How to fix it
Tie every form field to a label: <label for="email">Email</label><input id="email" type="email">. If you do not want a visible label, use aria-label; a placeholder does not replace a label.

Source: developer.mozilla.org

Link name

KOD-39IssueObserved
What it measures
Whether icon links have a readable name: text, aria-label, title or an image with alt.
Why it matters
An icon-only link (social, cart, menu) is read out as a bare address. Search engines and AI crawlers also learn where a link goes from its text.
How to fix it
Name icon links (social, cart, search): add aria-label="Instagram" to the link or give its image an alt; remove empty links.

Semantic regions (main, nav)

KOD-40Possible issueInferred
What it measures
Whether the page marks its main content (main) and menu (nav) regions.
Why it matters
<main> and <nav> separate the main content from the menu. Screen readers jump between regions; AI crawlers use these markers to tell the main text from menus and footers.
How to fix it
Wrap the main content in a single <main> and the menu in <nav>; use the article element for standalone pieces. If the template cannot change, add role="main" and role="navigation" to the containers.

Source: developer.mozilla.org

Single HTML root, no meta in body

KOD-41IssueObserved
What it measures
Whether the HTML and body roots open only once, and whether there are meta tags in the body.
Why it matters
An <html> or <body> opened twice usually means two templates were stacked; browsers ignore the second and its attributes are lost. A meta tag in the body (description, robots) may not be read by search engines.
How to fix it
Open <html> and <body> only once in the template (no nested or stacked template parts). Move <meta> tags into <head>; only microdata (itemprop) meta may stay in the body.

Broken and heavy content images

KOD-42Information, not scoredObserved
What it measures
Whether any of the first content images on the home page is broken (404) or very large.
Why it matters
A broken image makes the page look careless; a heavy one slows loading. Observation only; does not affect the score.
How to fix it
Information only. Fix the broken image address or remove the image. Convert images over 200 KB to WebP or compressed JPEG and resize them to the size they are shown at.

Source: web.dev

First image is lazy-loaded

KOD-43Information, not scoredObserved
What it measures
Whether the first content image loads lazily or with low priority (which delays the main content).
Why it matters
Lazy-loading the first on-screen image delays Largest Contentful Paint (LCP). Which image is above the fold depends on layout, so this is an observation.
How to fix it
Information only. Remove loading="lazy" from the first image visible above the fold and, if possible, give it fetchpriority="high". Keep lazy loading for images below the fold.

Source: web.dev

Lazy loading on video embeds

KOD-46Information, not scoredObserved
What it measures
Whether YouTube and Vimeo embeds carry loading="lazy".
Why it matters
YouTube and Vimeo embeds pull hundreds of KB of script and images. Without loading="lazy" even off-screen videos load on first open and slow the page. A single main video at the very top may load immediately on purpose. Information only; it does not affect the score.
How to fix it
Information only. Add loading="lazy" to YouTube and Vimeo embeds: <iframe src="..." loading="lazy" title="Video title">. A single main video at the very top may load immediately on purpose.

Source: web.dev

iframe titles

KOD-45Information, not scoredObserved
What it measures
Whether embedded iframes (maps, videos) have a title attribute.
Why it matters
A screen reader cannot say what an iframe without a title is; accessibility audits flag it. Give every iframe a short title. Information only; it does not affect the score.
How to fix it
Information only. Give every iframe a short title describing its content: <iframe src="..." title="Store map">.

Source: developer.mozilla.org

Conditional request and 304 support

KOD-44Information, not scoredObserved
What it measures
Whether, if the home page sends ETag or Last-Modified, a conditional request gets a "not modified" reply.
Why it matters
Validators and 304 support let bots re-check an unchanged page without downloading it again, which helps crawl budget and speed. Absence is normal for dynamic pages. Information only; it does not affect the score.
How to fix it
Information only. Enable ETag and Last-Modified headers on the server or CDN; on a conditional request (If-None-Match, If-Modified-Since) return 304 when the page has not changed. For dynamic pages, having no validator is normal.

Source: developer.mozilla.org

Real-user speed decline (CrUX history)

KOD-47Information, not scoredObserved
What it measures
Whether LCP, INP and CLS in real-visitor data (CrUX) have clearly worsened over weeks. Off by default.
Why it matters
A lab test shows a single moment; real-visitor data worsening over weeks suggests releases or plugins hurt speed. Information only; it does not affect the score.
How to fix it
Information only. Review the release, plugin and third-party script changes of recent weeks, working backwards; find the one that hurt speed by checking LCP, INP and CLS in PageSpeed Insights, then roll it back or lighten it.

Source: developer.chrome.com

Third-party script cost

KOD-48Information, not scoredObserved
What it measures
Whether the total main-thread blocking time in the PageSpeed third-party summary is high.
Why it matters
Ad, analytics and chat scripts can freeze the page; their cost matters, not their count. Information only; it does not affect the score.
How to fix it
Information only. In PageSpeed Insights, find the script taking the most time under "third-party code"; remove it if unneeded, otherwise load it with async/defer or after user interaction.

Source: web.dev

Structured data

22 signals: 17 explained here, 5 unique to Ruescan.

A JSON-LD block

YAP-01IssueObserved
What it measures
The page has a schema.org JSON-LD block.
Why it matters
Structured data tells search engines and AI systems the brand name, products and accounts in machine-readable form.
How to fix it
Add schema.org JSON-LD to the page: <script type="application/ld+json">{"@context":"https://schema.org","@type":"…"}</script> (at least Organization and WebSite).

Source: developers.google.com

Valid JSON

YAP-02IssueObserved
What it measures
Every JSON-LD block is valid JSON.
Why it matters
Search engines ignore a broken block entirely; everything in it is lost.
How to fix it
Fix the broken JSON-LD block with a JSON validator (trailing commas, unescaped quotes, truncated block).

Source: developers.google.com

@context and @type

YAP-03IssueObserved
What it measures
Every block has a schema.org @context and every node has an @type.
Why it matters
Without @context and @type a block is not recognized as schema.org data.
How to fix it
Add "@context": "https://schema.org" to every block and an "@type" to every node.

Source: developers.google.com

WebSite schema

YAP-04IssueObserved
What it measures
A WebSite type exists.
Why it matters
The WebSite schema defines the site name and URL; the site name in search results comes from it.
How to fix it
Add WebSite schema to the home page: {"@type":"WebSite","name":"Brand","url":"https://domain.com/"}.

Source: developers.google.com

WebSite name and alternateName

YAP-18OpportunityInferred
What it measures
The WebSite schema has a filled name and an alternateName.
Why it matters
Google reads the site name from the WebSite schema: name is required, alternateName is optional for a short or alternative name. With both filled, the site name in results is more likely to come out right.
How to fix it
Add name (the site name) and, if useful, alternateName (a short or alternative name) to the WebSite schema: {"@type":"WebSite","name":"Brand","alternateName":"Short name","url":"https://domain.com/"}.

Source: developers.google.com

BreadcrumbList schema

YAP-19OpportunityInferred
What it measures
Whether inner pages with a path two levels deep or more carry a JSON-LD BreadcrumbList.
Why it matters
BreadcrumbList shows the page's place on the site (Home > Category > Page) in search results and tells AI systems which section the page belongs to. Google requires at least two ListItems. A trail given as microdata may not be seen here.
How to fix it
Add the breadcrumb trail to inner pages as JSON-LD: {"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://domain.com/"},{"@type":"ListItem","position":2,"name":"Category","item":"https://domain.com/category/"}]}. At least two ListItems are needed; the page itself does not need its own item.

Source: developers.google.com

Content-describing schema type

YAP-06OpportunityInferred
What it measures
Beyond identity, a type describes the content (Product, Article, Service, LocalBusiness, SoftwareApplication, FAQPage...).
Why it matters
Product, service or article schema feeds content to AI answers and rich results directly.
How to fix it
Add a type that describes what the page offers: Product, Service, Article, LocalBusiness or SoftwareApplication.

Source: developers.google.com

Required fields in the schema

YAP-07IssueObserved
What it measures
Required fields per type are set (Product: name, price, currency; Article: headline, date, author; LocalBusiness: name, address; Event: name, date, location).
Why it matters
A schema missing required fields gets no rich result and gives AI systems half the information.
How to fix it
Fill the required fields for the type: Product name + offers.price + priceCurrency; Article headline + datePublished + author; LocalBusiness name + address; Event name + startDate + location.

Source: developers.google.com

FAQPage and visible text

YAP-08IssueObserved
What it measures
FAQPage questions also appear in the visible page text (no hidden schema).
Why it matters
Google treats schema marking up invisible content as a violation. Note: the FAQ rich result is now shown only for well-known government and health sites; the schema should still match the visible text (for AI summaries and trust).
How to fix it
If the page has FAQPage schema, show every question and answer visibly or remove the hidden ones from the schema. Google has not shown the FAQ rich result since 7 May 2026; do not add new FAQPage schema.

Source: developers.google.com

Absolute URLs in the schema

YAP-10IssueObserved
What it measures
url, sameAs, logo and image addresses in the schema are absolute and https.
Why it matters
Relative or http addresses cannot be resolved elsewhere; AI systems and search engines may not follow them.
How to fix it
Write the schema url, sameAs, logo and image values as absolute https URLs (e.g. https://domain.com/logo.png).

Source: developers.google.com

Organization fields

YAP-11IssueObserved
What it measures
The Organization schema has name, url and logo.
Why it matters
Name, URL and logo are the core trio of the brand card and knowledge panel.
How to fix it
Fill all three of name, url and logo on the Organization schema.

Source: developers.google.com

Schema date format

YAP-13IssueObserved
What it measures
Whether date fields in the schema use the ISO 8601 format.
Why it matters
A malformed date cannot be read; freshness and publish date information is lost.
How to fix it
Write schema dates in ISO 8601: 2026-10-10 or 2026-10-10T09:00:00+03:00.

Source: developers.google.com

Placeholder text in the schema

YAP-20IssueObserved
What it measures
Whether schema values hold an unfilled template pattern such as [Business Name] or {{ ... }}.
Why it matters
A leftover template value such as "[Business Name]" tells search engines and AI systems an empty pattern instead of the real name or address. Rich results fail, the data is read wrong and trust in the rest of the schema drops.
How to fix it
Replace the leftover placeholder with the real value: use your real business name instead of "name": "[Business Name]" and the real city instead of [City]. A plugin or theme settings field may have been left empty; fill it in and check with the Google Rich Results Test.

Source: developers.google.com

Video schema (VideoObject)

YAP-22Information, not scoredObserved
What it measures
Whether, when the page has a video, a VideoObject schema exists with name, thumbnailUrl and uploadDate filled.
Why it matters
Even when Google finds the video on the page, it reads its title, thumbnail and publish date from the schema; a video missing the required fields (name, thumbnailUrl, uploadDate) is weakly represented in video results and AI summaries. Information only; it does not affect the score.
How to fix it
Information only. Add a JSON-LD VideoObject for the video on the page and fill in name, thumbnailUrl and uploadDate (description and contentUrl/embedUrl are also recommended).

Source: developers.google.com

Self-serving review markup

YAP-23Information, not scoredObserved
What it measures
Whether the site's own Organization or LocalBusiness schema carries aggregateRating or review.
Why it matters
Google does not make a page eligible for star results when an organization marks up reviews about itself in its own Organization/LocalBusiness schema; the markup earns no stars and only bloats the schema. Product reviews on a product page are separate. Information only; it does not affect the score.
How to fix it
Information only. Remove aggregateRating and review about yourself from the Organization or LocalBusiness schema. Keep review markup only on product pages, attached to Product schema.

Source: developers.google.com

Schema dates and visible dates

YAP-24Information, not scoredObserved
What it measures
Whether dateModified is earlier than datePublished, and whether the schema date matches the visible date.
Why it matters
A modified date cannot precede the publish date; if the schema date disagrees with the visible one, search engines and AI systems do not know which to trust and the freshness signal weakens. Information only; it does not affect the score.
How to fix it
Information only. dateModified must never be earlier than datePublished, and schema dates should match the dates shown on the page; feeding both from the same field in the template is safest.

Source: developers.google.com

Duplicate organization nodes

YAP-25Information, not scoredObserved
What it measures
Whether the schema has several root nodes of the same type (Organization, WebSite) that conflict.
Why it matters
When an SEO plugin and the theme or a second plugin write the same organization twice, search engines and AI systems see two different entities and do not know which to trust. Keep one main organization and one WebSite node and switch the others off. Information only; it does not affect the score.
How to fix it
Information only. Switch off the second plugin or theme schema that writes the same organization and WebSite node; keep one main Organization and one WebSite node on the page, with the same name, address and domain.

Source: developers.google.com

The 5 unique signals in this category are not detailed.

Security and headers

31 signals.

HTTPS

GUV-01IssueObserved
What it measures
The site opens over HTTPS.
Why it matters
The home page arrives without encryption. Browsers mark it "not secure" and search engines prefer HTTPS.
How to fix it
Install a TLS certificate for the domain (e.g. Let's Encrypt or a CDN certificate) and serve the site over https://.

Source: developer.mozilla.org

HTTP to HTTPS redirect

GUV-02IssueObserved
What it measures
http:// redirects permanently (301/308) to HTTPS.
Why it matters
Visitors and bots arriving on http:// should not stay unencrypted; a permanent redirect also tells search engines the main address.
How to fix it
Redirect http:// requests permanently (301 or 308) to the same path on https://.

Source: developers.google.com

HSTS header

GUV-03IssueObserved
What it measures
An HSTS (Strict-Transport-Security) header exists with a max-age of at least one year.
Why it matters
HSTS makes browsers always open the site over HTTPS; without it, or with a short lifetime, the first request may go unencrypted. Browser preload lists and web.dev ask for at least one year.
How to fix it
Add Strict-Transport-Security: max-age=31536000; includeSubDomains to HTTPS responses.

Source: developer.mozilla.org

HSTS strength

GUV-04OpportunityInferred
What it measures
Whether HSTS lasts long and covers subdomains.
Why it matters
A one-year HSTS covering subdomains is required for browser preload lists and makes protection lasting.
How to fix it
Set HSTS to max-age=31536000; includeSubDomains (if all subdomains work over HTTPS).

Source: developer.mozilla.org

Content-Security-Policy

GUV-05IssueObserved
What it measures
Content-Security-Policy limits script sources: script-src or default-src exists without unsafe-inline/unsafe-eval/* (nonce, hash, strict-dynamic neutralise unsafe-inline).
Why it matters
CSP limits outside scripts being injected into the page (XSS). A CSP that only sets framing protection (frame-ancestors), or allows unsafe-inline/unsafe-eval/*, does not stop script injection.
How to fix it
Add a Content-Security-Policy header; try it first as Content-Security-Policy-Report-Only, then enforce (e.g. default-src 'self'; frame-ancestors 'none', adding the external sources you use).

Source: developer.mozilla.org

X-Content-Type-Options

GUV-06IssueObserved
What it measures
X-Content-Type-Options: nosniff.
Why it matters
nosniff stops browsers from guessing file types and running them wrongly.
How to fix it
Add the X-Content-Type-Options: nosniff header to responses.

Source: developer.mozilla.org

Framing protection

GUV-07IssueObserved
What it measures
Framing protection: CSP frame-ancestors or X-Frame-Options.
Why it matters
Without it, the page can be shown inside another site and used for clickjacking.
How to fix it
Add frame-ancestors 'self' to the CSP or send the X-Frame-Options: SAMEORIGIN header.

Source: developer.mozilla.org

Referrer-Policy

GUV-08IssueObserved
What it measures
A Referrer-Policy header exists.
Why it matters
Referrer-Policy limits how much of the visitor's address is passed to outside sites.
How to fix it
Add the Referrer-Policy: strict-origin-when-cross-origin header.

Source: developer.mozilla.org

Permissions-Policy

GUV-09OpportunityInferred
What it measures
A Permissions-Policy header exists.
Why it matters
Limits use of browser features such as camera, microphone and location on the page and in embeds.
How to fix it
Add a header that disables browser features you do not use, e.g. Permissions-Policy: camera=(), microphone=(), geolocation=().

Source: developer.mozilla.org

Mixed content

GUV-10IssueObserved
What it measures
No scripts or styles loaded over http:// on an HTTPS page.
Why it matters
Browsers block http:// scripts and styles on HTTPS pages; the page breaks and may show a "not secure" warning.
How to fix it
Change script, style and image URLs loaded over http:// on the page to https://.

Source: developer.mozilla.org

Version disclosure

GUV-11Possible issueInferred
What it measures
Server and X-Powered-By headers do not reveal version numbers.
Why it matters
A version number makes it easier for attackers to look up known flaws in that version.
How to fix it
Remove version numbers from the Server and X-Powered-By headers (e.g. server_tokens off; in nginx, expose_php = Off in PHP).

Source: developer.mozilla.org

The security.txt file

GUV-12OpportunityInferred
What it measures
/.well-known/security.txt exists with Contact and a valid Expires.
Why it matters
security.txt tells people who find a vulnerability how to reach you (RFC 9116).
How to fix it
Publish /.well-known/security.txt with Contact: mailto:security@domain.com and an Expires: date within a year, e.g. 2027-10-01T00:00:00Z.

Source: www.rfc-editor.org

Cookie flags

GUV-13IssueObserved
What it measures
Whether the home page cookies carry the Secure, HttpOnly and SameSite flags.
Why it matters
A cookie without Secure can leak over plain connections; HttpOnly and SameSite make cookie theft and cross-site request forgery harder. Cookie values are not stored.
How to fix it
Set cookies with Secure; HttpOnly; SameSite=Lax (or Strict where suitable); drop only HttpOnly on cookies JavaScript must read.

Source: developer.mozilla.org

SPF record

GUV-14IssueObserved
What it measures
The domain has exactly one SPF record (v=spf1).
Why it matters
SPF says who may send email for your domain; without it, spoofing your domain is easier. Multiple SPF records are invalid.
How to fix it
Add a single SPF TXT record, e.g. v=spf1 include:_spf.your-mail-provider -all (merge multiple SPF records; if you send no mail, v=spf1 -all).

Source: www.rfc-editor.org

DMARC record

GUV-15IssueObserved
What it measures
DMARC record with p=quarantine or p=reject.
Why it matters
DMARC says what happens to spoofed mail failing SPF and DKIM; p=none only reports, it does not protect.
How to fix it
Add a TXT record at _dmarc; start with v=DMARC1; p=none; rua=mailto:… to watch reports, then move to p=quarantine or p=reject.

Source: www.rfc-editor.org

CAA record

GUV-16OpportunityInferred
What it measures
A CAA record exists (which certificate authorities may issue).
Why it matters
CAA lets only authorities you allow issue certificates for your domain, reducing mis-issuance risk.
How to fix it
Add a CAA record allowing your certificate authority, e.g. 0 issue "letsencrypt.org".

Source: www.rfc-editor.org

DNSSEC

GUV-17OpportunityInferred
What it measures
DNSSEC validates (AD flag in the resolver answer).
Why it matters
DNSSEC stops DNS answers being altered in transit, so visitors cannot be sent to a fake server.
How to fix it
Enable DNSSEC at your DNS provider and add the DS record it gives you at your domain registrar.

rel="noopener"

GUV-18Possible issueInferred
What it measures
External links opening in a new tab have rel="noopener" or "noreferrer".
Why it matters
Without noopener, the opened page can redirect your tab elsewhere in older browsers (tabnabbing).
How to fix it
Add rel="noopener" (or noopener noreferrer) to external links with target="_blank".

Source: developer.mozilla.org

Plain-text email address

GUV-19Possible issueInferred
What it measures
No plain-text email address in the visible text (addresses are not stored, only counted).
Why it matters
Plain-text addresses are harvested by spam bots; a contact form or obfuscated link is safer.
How to fix it
Replace plain e-mail addresses in visible text with a contact form or a mailto: link (reduces spam harvesting).

Hidden spam links

GUV-20IssueObserved
What it measures
Whether a hidden block on the page holds outbound links with spam terms such as betting, casino or pills, or many different outside domains (a sign of a hacklink attack).
Why it matters
In a hacklink attack the attacker plants hidden links in your site's code; visitors do not see them but search engines do. They usually point to illegal betting, casino, pharmacy or adult sites. Without knowing it, you become a spam source and Google may penalise you.
How to fix it
Your site has probably been compromised; work through these in order. 1) Find the file holding the hidden links (theme, plugin, footer, a post or widget in the database) and delete them; if unsure, restore a clean backup. 2) Change every password: admin panel, hosting, FTP, database. Delete admin accounts you do not recognise. 3) Update the theme, plugins and the CMS; remove plugins you do not use or cannot vouch for. 4) In Google Search Console open "Security and manual actions" then "Security issues"; if a problem is listed, request a review after cleaning up.

Hidden keyword stuffing

GUV-21Possible issueInferred
What it measures
Whether a hidden block on the page holds a long text that repeats the same words (keyword stuffing).
Why it matters
Text that visitors cannot see but search engines read, repeating the same words, breaks Google's hidden text and keyword stuffing rules (spam policy). An old SEO practice, a theme or a compromised file may have placed it. The check is heuristic; legitimate hidden content may rarely be flagged.
How to fix it
Find the hidden block (theme file, SEO plugin field, footer or content in the database) and delete it. If some of the text is worth ranking for, put it in a section visitors can see, in natural sentences without repetition. If you did not add the hidden block, the site may be compromised: change the passwords and update the theme and plugins.

Conditional redirect trace

GUV-22IssueObserved
What it measures
Whether the raw HTML has a meta refresh to another domain or a script that sends visitors arriving from a search engine to another domain (a sign of a hidden redirect).
Why it matters
Redirects that send visitors arriving from Google to another site, or automatically move the page to another domain, are a typical trace of a hacklink attack; showing bots one page and visitors another (cloaking) breaks Google's spam policy. Unless it is a deliberate domain move, the site may be compromised.
How to fix it
If you did not add the redirect, the site may be compromised: find the file it comes from (theme header, plugin, .htaccess, a script in the database) and delete it, change all passwords, update the theme and plugins, and check "Security issues" in Search Console. If it is a deliberate domain move, use a permanent (301) server redirect instead of <meta http-equiv="refresh">.

Does robots.txt list sensitive file paths

GUV-23Information, not scoredObserved
What it measures
Whether any Disallow line in robots.txt names a sensitive file path such as .env, .git, a backup or .sql; admin paths are only noted. Information only.
Why it matters
robots.txt is public. A line such as "Disallow: /.env" or "/backup/" does not guide bots, it points attackers: it says such a file may exist. The real fix is not hiding the path in robots.txt but blocking access on the server (and removing the file from the web root). Removing the line alone does not remove the risk. Information only; it does not affect the score.
How to fix it
Information only. Lines in robots.txt such as .env, .git, backups or .sql reveal that such files may exist. The real fix is to remove these files from the web root and block access on the server; then delete the matching Disallow line too.

Source: developers.google.com

Cross-Origin-Opener-Policy header

GUV-24Information, not scoredObserved
What it measures
Whether the home page response has a Cross-Origin-Opener-Policy header. Absence is only an observation.
Why it matters
This header cuts the window link with other sites that open your page. Information only: with the wrong value it can break popup payment or sign-in (OAuth) flows, so it does not affect the score.
How to fix it
Information only. If the site has no popup payment or sign-in (OAuth), Cross-Origin-Opener-Policy: same-origin can be added to the server response; if it has, try same-origin-allow-popups first and test the payment/sign-in flow.

Source: developer.mozilla.org

SRI (integrity) on external scripts

GUV-25Information, not scoredObserved
What it measures
Whether scripts loaded from CDNs such as cdnjs, jsDelivr and unpkg carry an integrity attribute.
Why it matters
SRI checks that a script loaded from elsewhere matches the expected content; if the CDN file changes, the browser refuses to run it. Information only; it does not affect the score. Unversioned (@latest) URLs cannot be used with SRI because the file keeps changing.
How to fix it
Information only. Pin the CDN script tag to a version and add integrity="sha384-..." crossorigin="anonymous" (the hash is on the CDN page or at srihash.org). Pin @latest URLs to a version.

Source: developer.mozilla.org

Outdated JavaScript library

GUV-26Information, not scoredObserved
What it measures
Whether the jQuery or AngularJS version visible in a script URL is old and out of support.
Why it matters
The version number in the script URL looks old. The jQuery 3.5.0 release notes include a security fix; AngularJS 1.x support ended in January 2022. Only the version in the URL was read; this check cannot tell whether the site is actually affected. Information only; it does not affect the score.
How to fix it
Information only. Upgrade jQuery to 3.5.0 or newer (test plugin compatibility); plan a move from AngularJS 1.x to a maintained framework. If the URL has no version, check the version in the site's own file.

Source: blog.jquery.com

End of the SPF record

GUV-27Information, not scoredObserved
What it measures
Whether the SPF record ends in an all rule that allows everyone or enforces nothing.
Why it matters
The trailing "all" in an SPF record says what to do with senders not on the list. "+all" lets anyone send as your domain, "?all" enforces nothing (RFC 7208). Information only; it does not affect the score.
How to fix it
Information only. Replace the trailing +all or ?all in the SPF record with -all (strict) or ~all (soft); first make sure every legitimate sender is listed (include:).

Source: www.rfc-editor.org

DMARC report address (rua)

GUV-28Information, not scoredObserved
What it measures
Whether the DMARC record has an aggregate report address (rua).
Why it matters
The rua= address says where aggregate reports about mail sent as your domain go (RFC 7489). Without it you cannot see spoofed or broken mail. Information only; it does not affect the score.
How to fix it
Information only. Add rua=mailto:reports@yourdomain.com to the DMARC record; pick a mailbox or DMARC report service to read the reports.

Source: www.rfc-editor.org

Cookie consent tool trace

GUV-29Information, not scoredObserved
What it measures
Whether a trace of a known cookie consent tool is seen when a tracking script is present. Not a legal assessment.
Why it matters
The page has a tracking script but no trace of a known cookie consent manager was seen. This is not a legal assessment: a consent tool may run via inline script or server-side, which this check cannot see. Assessing KVKK and ePrivacy compliance is up to the site owner. Information only; it does not affect the score.
How to fix it
Information only; not a legal assessment. If you use tracking scripts, verify yourself that your cookie consent tool runs on the page; compliance assessment (KVKK, ePrivacy) belongs to the site owner and legal counsel.

MTA-STS mail transport security

GUV-30Information, not scoredObserved
What it measures
Whether the domain has an MTA-STS record and an enforcing policy. Not applicable to domains that receive no mail.
Why it matters
MTA-STS asks that mail to your domain travels between servers over encrypted connections (RFC 8461). "testing" mode only reports and does not enforce. Information only; it does not affect the score.
How to fix it
Information only. Add a v=STSv1; id=... TXT record at _mta-sts.yourdomain.com and a policy file at https://mta-sts.yourdomain.com/.well-known/mta-sts.txt; start with mode: testing, check reports, then switch to enforce.

Source: www.rfc-editor.org

Google Web Risk unsafe-site lists

GUV-31Information, not scoredObserved
What it measures
Whether the home address is listed in Google Web Risk lists (malware, phishing). Off by default.
Why it matters
This comes from the Google Web Risk list; the list belongs to Google, may be incomplete or wrong, and this check does not judge the actual state of the site. Verify the entry under "Security issues" in Google Search Console. Information only; it does not affect the score.
How to fix it
Information only. Verify the entry under "Security issues" in Google Search Console; if the issue is real, clean up and request a review. The list belongs to Google and can be wrong.

Source: cloud.google.com

Sharing

14 signals.

og:title

PAY-01IssueObserved
What it measures
An og:title tag exists.
Why it matters
The title shown when the link is shared on social media or in chat comes from this tag.
How to fix it
Add <meta property="og:title" content="Page title">.

Source: ogp.me

og:description

PAY-02IssueObserved
What it measures
An og:description tag exists.
Why it matters
The description under a shared link comes from this tag.
How to fix it
Add <meta property="og:description" content="Short description">.

Source: ogp.me

og:image

PAY-03IssueObserved
What it measures
An og:image tag exists.
Why it matters
Share cards without an image get fewer clicks; some AI interfaces also use it on source cards.
How to fix it
Add a share image with an absolute URL: <meta property="og:image" content="https://domain.com/share.jpg"> (1200×630).

Source: ogp.me

og:image loading and size

PAY-04IssueObserved
What it measures
Whether og:image opens and is large enough for a share card.
Why it matters
An image that does not open leaves the card empty; below 1200×630 it shows blurry or as a small card.
How to fix it
Make sure the og:image URL opens and the image is at least 1200×630 pixels.

Source: ogp.me

og:url

PAY-05IssueObserved
What it measures
og:url is the same address as the canonical.
Why it matters
Shares accumulate on og:url; if it differs from the canonical, share signals go to another address.
How to fix it
Make og:url the same as the canonical URL.

Source: ogp.me

og:type, og:site_name and og:locale

PAY-06IssueObserved
What it measures
og:type, og:site_name and og:locale exist.
Why it matters
These tags state the content type, site name and language; cards and AI source displays become more accurate.
How to fix it
Add the missing Open Graph tags: og:type (website), og:site_name (brand), og:locale (e.g. en_US).

Source: ogp.me

twitter:card

PAY-07IssueObserved
What it measures
A twitter:card tag exists.
Why it matters
This tag sets how a link shared on X looks; without it, a small card may be shown.
How to fix it
Add <meta name="twitter:card" content="summary_large_image">.

twitter:image

PAY-08IssueObserved
What it measures
A twitter:image tag exists.
Why it matters
X usually falls back to og:image, but no image cropped for X is given. Without og:image too, the card has no image.
How to fix it
Add <meta name="twitter:image" content="https://domain.com/share.jpg">.

Favicon and apple-touch-icon

PAY-09IssueObserved
What it measures
The site icon (favicon) opens and an apple-touch-icon is defined.
Why it matters
The icon shows the brand in tabs, bookmarks, search results and AI answer source lists.
How to fix it
Add a working site icon (<link rel="icon" href="/favicon.ico">) and <link rel="apple-touch-icon" href="/apple-touch-icon.png"> (180×180).

Source: developers.google.com

Web app manifest

PAY-10OpportunityInferred
What it measures
A web app manifest (link rel=manifest) and theme-color exist.
Why it matters
A manifest and theme color let the site be added like an app on phones and tint the browser bar in brand color.
How to fix it
Add <link rel="manifest" href="/site.webmanifest"> (name, icons, colours) and <meta name="theme-color" content="#…">.

Source: developer.mozilla.org

Share image ratio

PAY-11Information, not scoredObserved
What it measures
Whether og:image has a ratio suited to a wide share card, or is square or tall.
Why it matters
Social cards crop the image to a wide (about 1.91:1) box; square or tall images may lose their edges. Observation only.
How to fix it
Information only. Prepare the share image in landscape, about 1200×630 pixels (1.91:1), with the key text and faces in the centre so square or tight crops do not cut them.

Source: ogp.me

Share image format

PAY-12Information, not scoredObserved
What it measures
Whether og:image uses a format such as SVG or AVIF that may not show on every social network.
Why it matters
Some social platforms and chat apps may not show SVG/AVIF share images. JPEG or PNG is safe everywhere. Observation only.
How to fix it
Information only. Use JPEG or PNG for og:image; SVG and AVIF may not show on many social networks and chat apps.

Source: ogp.me

Share image alt text

PAY-13Information, not scoredObserved
What it measures
Whether og:image:alt is defined when og:image is present.
Why it matters
The share image alt text describes the card to users who cannot see the image. Observation only.
How to fix it
Information only. Add <meta property="og:image:alt" content="Short sentence describing the image">; if your SEO plugin has an alt text field for the share image, fill it in.

Source: ogp.me

Favicon size and availability

PAY-14Information, not scoredObserved
What it measures
Whether the favicon file opens, is square and meets the smallest size Google asks for.
Why it matters
Google shows the favicon in results only if it is square and at least 48×48 pixels. Observation only.
How to fix it
Information only. The favicon file must open, be square and at least 48×48 pixels (SVG also works): <link rel="icon" href="/favicon.svg" type="image/svg+xml">. Google shows only an icon that meets this in search results.

Source: developers.google.com

Language and hreflang

13 signals: 10 explained here, 3 unique to Ruescan.

The html lang attribute

ULU-01IssueObserved
What it measures
The <html> tag has a lang attribute.
Why it matters
The language lets search engines and screen readers handle the page correctly; AI answers pick sources in the right language.
How to fix it
Set the page language on the <html> tag: <html lang="en">. Note: Google does not use lang for language detection [G]; it is still needed by screen readers, browsers and other systems.

Source: developer.mozilla.org

Language code and text language

ULU-02IssueObserved
What it measures
lang is a valid language code and matches the text language (detection for Turkish and English).
Why it matters
A wrong language code makes the page show up in searches and AI answers for the wrong language.
How to fix it
Match lang to the text language and use a valid language code (tr, en, en-GB). Note: Google does not use lang for language detection [G]; its real value is for screen readers and browsers.

Source: developer.mozilla.org

og:locale match

ULU-07IssueObserved
What it measures
og:locale states the same language as the page lang.
Why it matters
If the share card language contradicts the page language, platforms may display it in the wrong language.
How to fix it
Make og:locale the same language as lang (e.g. en_US for lang="en").

Source: ogp.me

Do hreflang methods agree

ULU-15Information, not scoredObserved
What it measures
Whether the hreflang language sets and addresses in the HTML or HTTP header and in the sitemap are the same.
Why it matters
Google reads hreflang from HTML, the HTTP header and the sitemap, and the methods do not complement each other; if they give different language sets or different addresses for the same language, it is unclear which one to trust. Giving the same information in one consistent method is safest. Information only; it does not affect the score.
How to fix it
Information only. Give hreflang with one method (HTML <link>, HTTP Link header or sitemap) and the same language set and addresses everywhere; remove the second method or match it exactly to the first.

Source: developers.google.com

Language-version traces without hreflang

ULU-12Information, not scoredObserved
What it measures
Whether a language switcher or og:locale:alternate trace exists while no hreflang is found in HTML, HTTP header or sitemap.
Why it matters
The site seems to have pages in other languages but search engines are not told which page matches which language; language versions may be treated as duplicates. Information only; it does not affect the score.
How to fix it
Information only. If you have language versions, add reciprocal hreflang to every page (including itself, with x-default): HTML <link>, HTTP Link header or sitemap; pick only one of the methods.

Source: developers.google.com

Content-Language and html lang match

ULU-13Information, not scoredObserved
What it measures
Whether the HTTP Content-Language header and the html lang attribute name the same language.
Why it matters
Bing may read the Content-Language header as a language signal; if it differs from the page language the page may show for the wrong language. Information only; it does not affect the score.
How to fix it
Information only. Set the HTTP Content-Language header to the same language as <html lang>, or do not send the header; on a multilingual page do not put a single language in the header.

Source: developer.mozilla.org

Language-based automatic redirect

ULU-14Information, not scoredObserved
What it measures
Whether a request with Accept-Language: en is redirected to another address (a bot sees only one language).
Why it matters
Automatic language redirects make a bot see only one language version; other versions may go undiscovered. Information only; it does not affect the score.
How to fix it
Information only. Instead of redirecting automatically by browser language, show visitors a link to pick the language; keep each language version open to everyone and to bots at its own address.

Source: developers.google.com

The 3 unique signals in this category are not detailed.

App links

6 signals.

apple-app-site-association

APP-02IssueObserved
What it measures
If there is an iOS app, apple-app-site-association is valid JSON with applinks (universal links).
Why it matters
Without this file, site links do not open the app on iPhone; users and search traffic cannot hand over to the app.
How to fix it
Publish /.well-known/apple-app-site-association (no extension, application/json) with appIDs and paths in applinks.details.

Source: developer.apple.com

assetlinks.json

APP-03IssueObserved
What it measures
If there is an Android app, assetlinks.json is valid with package_name and sha256_cert_fingerprints (App Links).
Why it matters
Without this file, site links do not open the app on Android in a verified way.
How to fix it
Publish /.well-known/assetlinks.json with the package_name and the signing certificate's sha256_cert_fingerprints.

Source: developer.android.com

Smart App Banner

APP-04OpportunityInferred
What it measures
If there is an iOS app, a Smart App Banner (apple-itunes-app meta) exists.
Why it matters
The banner atop the site in Safari moves visitors to the app with one tap.
How to fix it
Add <meta name="apple-itunes-app" content="app-id=YOUR_APP_ID">.

Source: developer.apple.com

App Links meta tags

APP-05OpportunityInferred
What it measures
If there is an app, App Links meta tags (al:ios:url, al:android:package) exist.
Why it matters
These tags help shared links open in the app and app content get indexed.
How to fix it
Add the App Links meta tags: al:ios:url, al:ios:app_store_id, al:android:package, al:android:url.

App schema

APP-06OpportunityInferred
What it measures
If there is an app, a SoftwareApplication/MobileApplication schema with operatingSystem and offers.
Why it matters
An app schema gives the app name, platform and price to AI answers and search results.
How to fix it
Add SoftwareApplication or MobileApplication schema: name, operatingSystem ("iOS, Android") and offers ("price": "0" if free).

Source: schema.org

apple-app-site-association paths

APP-09IssueObserved
What it measures
apple-app-site-association defines paths or components.
Why it matters
Without paths, it is unclear which site addresses open in the app; deep links do not work.
How to fix it
Define the paths to open in apple-app-site-association with components (or legacy paths), e.g. {"/": "/product/*"}.

Source: developer.apple.com

Next

How the score is calculated and the guide articles are linked below.

Early access list

Join the list and hear first when Ruescan opens.

Join the early access list