Skip to content
← All documentation
63 checks

Content

Titles, descriptions, headings and the substance of the page itself — what a searcher sees before they click, and what they find after.

High

Duplicate page titles

Write a unique title for each page that describes what only that page is about.

Several pages carry an identical title, so in the results they look like one page repeated. The title is the shop sign in the search engine's window: if five pages hang the same sign, Google does not know which to show for a given question, and the reader does not know which to click. What usually hides here: a template printing the shop name instead of the page name, pagination without the page number in the title, or product variants without the attribute in the title. Fix the template: one field there fixes all of these pages at once.

Id
DUPLICATE_TITLE
Fix estimate
4 min per page
High

Page answers 200 with nothing in it

Serve the page's content in the HTML, or answer 404 if there is none: an empty 200 is indexed as a page about nothing.

The page answers "all fine" and there is nothing in it. A 200 promises content, and Google gets a header, a footer and a void in between. To the index that is a page without value, and often it ends up filed as a soft 404. Usually it is a product deleted only halfway, a category page that ran out of products, or a template whose middle is loaded by a script that crashed. Decide whether this page should exist: if so, give it content; if not, a 404 or 410.

Id
EMPTY_PAGE
Fix estimate
15 min per page
High

Missing page title

Add a <title> tag of roughly 50–60 characters that says what the page is about.

Id
MISSING_TITLE
Fix estimate
4 min per page
HighEstimate

Garbled letters in the text

ó where ó should be is UTF-8 text decoded as Latin-1: the database, the template or the header declares the wrong encoding; find which and set it to utf-8.

Id
MOJIBAKE_TEXT
Fix estimate
20 min per page
HighEstimate

The markup states what the page does not show

Marking up content a reader cannot see risks a manual action and the loss of rich results: generate the markup from the field the template prints.

The structured data promises something the page does not show: a rating nobody can see, a price other than the one on the product page, an author absent from the text. Google compares the markup with the visible content, and when they part it stops trusting the markup across the whole site, and with repeated discrepancies it may apply a manual action. Markup should describe only what is visible on the page. Fix the content or the markup so they say the same thing.

Id
SCHEMA_VALUE_NOT_IN_TEXT
Fix estimate
25 min per page
High

A server warning is printed into the page

PHP (or the framework) prints its warning above or inside the content, with the file path; fix the cause in the named file and turn display_errors off on production.

Id
SERVER_ERROR_IN_PAGE
Fix estimate
20 min per page
High

Title arrives only after JavaScript runs

Send the title in the HTML the server returns; everything that reads the page before running scripts sees it without one.

The page title is added by a script; in the HTML from the server it is missing or the same for every page. The title is the first thing Google reads and the one it shows in the results. If on the first read every page is called "App" or nothing at all, that is how it may land in the results before rendering happens. This is typical of single-page applications that set the title from the router. Title, description and canonical should come from the server even when the rest of the page is built in the browser.

Id
TITLE_ONLY_IN_RENDERED_HTML
Fix estimate
20 min per page
High

An unclosed script swallows the rest of the page

A <script> with no </script> makes the parser read everything after it as code; the reader may still see the page, search engines see it end there. Close the tag.

Id
UNCLOSED_SCRIPT_SWALLOWS_CONTENT
Fix estimate
10 min per page
MediumEstimate

The answer sits in the back half of the page

The section that answers what people search for starts more than halfway down: lift it, or open with a paragraph that answers outright.

The answer to the question this page is meant to answer sits in the back half of the text. The front half is introduction, history, context. A reader from a search engine is looking for the answer and leaves before reaching it, and an AI assistant that quotes pages takes a passage from the top, the one without the answer. Move the answer to the top, under the heading, in two or three sentences, and leave the history and context below for those who want more. A good article starts at the end.

Id
ANSWER_BURIED_IN_DOCUMENT
Fires at
> 0.5 %
Fix estimate
30 min per page
MediumEstimate

The markup and the page disagree on whether the item can be bought

The structured data says one availability and the page shows the other (a sold-out notice, or an add-to-cart button); make both read from the same stock field.

Id
AVAILABILITY_MISMATCH_WITH_SCHEMA
Fix estimate
15 min per page
Medium

A page built in Elementor is served without its stylesheet

Regenerate the CSS files in Elementor (Tools, Regenerate CSS and Data) and check the uploads folder is writable; without them the page shows in the theme's default layout.

Id
BUILDER_CSS_MISSING
Fix estimate
15 min per page
Medium

The header and the document declare different encodings

Browsers follow the Content-Type header and editors the meta tag, so the same file reads two ways; make both say the encoding the file is actually saved in, normally utf-8.

Id
CHARSET_MISMATCH
Fix estimate
15 min per page
MediumNeeds GSCEstimate

Search clicks dropped vs the prior 30-day period

Your own Search Console property: the last 30 settled days against the 30 before. Fewer clicks from Google is not lost sales and not proof that AI took the traffic. Check indexing, position and the season, ideally against the same month a year ago, before rewriting anything.

This page brings clearly fewer clicks than in the previous thirty days. A drop always has a cause, and it is worth naming before the lower level becomes the norm. The causes come in roughly three kinds: something changed on the page (a new title, a rebuild, a noindex, a server error), something changed in the results (a competitor, AI Overviews, the season), or the position stands while the click-through rate falls, which points at how the result looks. Compare position, impressions and click-through rate for this page across both periods in Search Console: whichever of the three moved says where to look.

Id
CLICKS_DROP
Fix estimate
20 min per page
Medium

The page and its markup give different dates

Two dates on one page is a contradictory freshness signal: drive both from the same field.

Id
DATE_TEXT_MARKUP_MISMATCH
Fix estimate
15 min per page
Medium

Duplicate meta descriptions

Give each page its own one- or two-sentence description of what is on it.

Id
DUPLICATE_META_DESCRIPTION
Fix estimate
4 min per page
MediumEstimate

The follow-up questions go unanswered here

An answer engine splits a question and picks a source for each part: add the sections that belong to this page, and link the pages that hold the rest.

The page answers the question, but not the questions that come right after it. Before an AI assistant cites a page, it checks whether the page also answers the natural follow-ups: how much does it cost, how long does it take, what if not, how does it differ from that other one. If not, it looks for a source that answers all of them at once. This finding says there are quite a few such questions here without answers. The list is on the card; add sections that close them instead of writing separate pages.

Id
FANOUT_COVERAGE_LOW
Fires at
< 0.4 %
Fix estimate
60 min per page
MediumNeeds GSCEstimate

High impressions but low click-through rate

Your own Search Console property, the last 30 settled days. A low CTR is a reason to look closer, and on its own it does not prove the title is weak: check the position, the device and what the result page shows, since an answer box or a search for another brand takes the click. Rewrite the title and description only when the snippet itself is the problem.

This page shows in the results often, and almost nobody clicks it. Google is doing its part: it displays. The problem is the shop sign, the title and description the reader sees in the results and is not convinced by. This is the cheapest improvement in all of SEO, because the page already ranks; people only have to start choosing it. What usually hides here: a title with the company name first, a description cut off mid-sentence, or a title that does not contain what people type. Look in Search Console at the queries the page shows for, and write the title for those queries. Then compare the click-through rate before and after: the only hard proof the new sign works. If impressions grow while clicks stand still at the same position, that may also be the fingerprint of AI Overviews, with your title playing no part.

Id
HIGH_IMPRESSIONS_LOW_CTR
Fires at
≥ 100 impressions
Fix estimate
15 min per page
MediumEstimate

Title barely matches the page content

Rewrite the title so it reflects what the page actually says — a mismatched title costs clicks and rankings.

Id
IRRELEVANT_TITLE
Fires at
< 0.3 score
Fix estimate
8 min per page
Medium

Placeholder "lorem ipsum" text left on the page

Replace the placeholder text with real content — it is visible to visitors and search engines alike.

Id
LOREM_IPSUM_PLACEHOLDER
Fix estimate
15 min per page
MediumEstimate

Little on the page anyone could check

Few figures, dates or attributed sources for the length: give the claims values with units and say where they come from.

There is little on this page that could be checked: numbers, dates, names, sources. Many adjectives, few facts. The reader does not know whether to trust it, and an AI assistant choosing what to cite prefers a sentence with a number to a sentence with an adjective. That does not mean writing like a report. One sentence with something concrete in every paragraph is enough: how much, when, how it is known. Usually these are texts written "for SEO", or by an agency that did not know the product.

Id
LOW_EVIDENCE_DENSITY
Fires at
< 5 marketing.docs.unit.facts
Fix estimate
45 min per page
Medium

Missing H1 heading

Add one H1 heading near the top of the page that matches its main topic.

Id
MISSING_H1
Fix estimate
5 min per page
Medium

Images missing alt text

Add a short alt attribute describing each image for screen readers and image search.

Id
MISSING_IMAGE_ALT
Fix estimate
2 min per page
Medium

Missing lang attribute

Declare the page language on the html element, for example lang="pl", so screen readers and search engines know how to read it.

Id
MISSING_LANG
Fix estimate
5 min per page
MediumEstimate

The price in the markup is not the price on the page

The Offer in the structured data names a price the page does not show; make the markup read the same price as the theme, a rich result that disagrees with the page can cost a manual action.

The price in the structured data differs from the price visible on the page. Google shows the price from the markup in the results, so the reader sees one amount in Google and another after clicking. That breaks trust and the guidelines, and Google stops showing a price next to your results. Usually it is a markup cache that does not refresh when the price changes, a promotion visible only in the HTML, or a net price in one place and gross in the other. The markup should be generated from the same source as the visible price.

Id
PRICE_MISMATCH_WITH_SCHEMA
Fix estimate
15 min per page
MediumNeeds GSCEstimate

Clicks on a search query fell vs the prior 30-day period

Your own Search Console property: the last 30 settled days against the 30 before, for the searches Google revealed on this page. A search missing from one window has been withheld by Google and its count is unknown, so only searches present in both windows are compared. Check the position and the result page for them before editing.

Id
QUERY_CLICKS_DROP
Fix estimate
20 min per page
MediumNeeds GSCEstimate

A search query ranks for this page but almost nobody clicks

Your own Search Console property, the last 30 settled days, for the searches Google revealed on this page. This is a queue of searches to check before any of them counts as lost clicks: see where the result sits, what the result page shows and whether this page is the right answer before changing the title.

For this particular query your page shows often, and almost nobody clicks. The difference from the whole page matters: a page can have a good click-through rate overall and lose on this one question, because the title speaks of something other than what the person typed. Look at how the query reads and check whether the title and the first sentence of the page answer it outright. Sometimes reordering the title is enough; sometimes it turns out this question needs a page of its own.

Id
QUERY_HIGH_IMPRESSIONS_LOW_CTR
Fires at
≥ 50 impressions
Fix estimate
15 min per page
MediumNeeds GSCEstimate

Average search position worsened vs the prior 30-day period

Your own Search Console property: the last 30 settled days against the 30 before. An average position also worsens when a page starts showing for new, more distant searches, so this card appears only when impressions did not grow. See which searches moved before changing the page.

The average position of this page in the results worsened against the previous thirty days. A sliding position costs clicks long before it becomes a drop someone notices in revenue. The causes are usually two: the page did not change and the competition did, or the page changed, losing internal links, part of its content or its speed. Check what changed on the page in this period, and look at who now sits above you for the main query. From 4 to 7 is a different problem from 10 to 20.

Id
RANKING_POSITION_WORSENED
Fires at
≥ 3 positions
Fix estimate
25 min per page
Medium

Structured data missing required properties

Id
STRUCTURED_DATA_INVALID
Fix estimate
10 min per page
Medium

Template image missing alt text

One image the theme prints on every page (a logo or icon) has no alt text — add it once in the template and every page is covered.

Id
TEMPLATE_IMAGE_MISSING_ALT
Fix estimate
5 min per page
MediumEstimate

Template syntax printed as text

{{ name }} or <?php on the page means the template engine never ran on that text; a wrong file extension, a disabled plugin or a copy-pasted snippet. Fix the source so the value is printed.

Id
TEMPLATE_VARIABLE_LEAK
Fix estimate
15 min per page
MediumEstimate

Thin content

Expand the page with genuinely useful detail, or merge it into a stronger related page.

There is too little on this page to answer any question. A heading, a photo, two sentences and a footer. Google looks for pages that add something, and a page of three sentences adds less than any other on the same subject, so there is no reason to show it. This finding rests on a word count and says nothing about quality: a short contact page is fine, while a short product page meant to compete in Google has a problem. What usually hides here: products with a one-line description, categories without text, tags and "under construction" pages. Ask of each: is anyone meant to arrive here from a search engine? If so, write content that answers what they came for. If not, merge it into a stronger page or keep it out of the index.

Id
THIN_CONTENT
Fires at
< 200 words
Fix estimate
30 min per page
MediumEstimate

The title is about something else

The title carries almost none of the words this page is found for: name in it what people came here to do.

Id
TITLE_MISSES_TARGET_QUERY
Fires at
< 0.5 %
Fix estimate
10 min per page
Medium

Title printed outside the head

Something is printed before <!doctype>, so the whole head lands in the body: the title still shows, but the canonical and robots tags next to it are ignored. Remove whatever comes first.

Id
TITLE_OUTSIDE_HEAD
Fix estimate
6 min per page
Medium

A shortcode shows as text

The plugin that rendered this shortcode is gone or disabled, so the reader sees the code; reinstall it or remove the shortcode from the content.

Id
UNPROCESSED_SHORTCODE
Fix estimate
10 min per page
Low

Duplicate H1 across pages

Id
DUPLICATE_H1
Fix estimate
5 min per page
Low

Duplicate image alt text

Id
DUPLICATE_IMAGE_ALT
Fix estimate
2 min per page
Low

Empty heading tags

Give every heading text, or use a styled div where the tag was only there for spacing.

Id
EMPTY_HEADING
Fix estimate
3 min per page
LowNeeds JS render

The main heading is hidden from readers

The h1 is in the page and the theme hides it with display, visibility, opacity or a zero font size; show it, or make the visible title the h1.

Id
HEADING_INVISIBLE
Fix estimate
5 min per page
Low

Share card is missing tags

Fill in the four tags a share card needs: title, description, image and url.

Id
INCOMPLETE_OPEN_GRAPH
Fix estimate
10 min per page
LowEstimate

Meta description barely matches the page content

Rewrite the description using the vocabulary of the page itself so Google keeps it instead of substituting its own.

Id
IRRELEVANT_META_DESCRIPTION
Fires at
< 0.2 score
Fix estimate
6 min per page
LowEstimate

Low text-to-HTML ratio

Id
LOW_TEXT_RATIO
Fires at
< 10 %
Fix estimate
20 min per page
Low

Article has no author in its markup

Name the author in the article markup: an answer engine cites what it can attribute.

Id
MISSING_ARTICLE_AUTHOR
Fix estimate
10 min per page
Low

Article has no date in its markup

Add datePublished, and dateModified when it changes: undated advice is quoted less and trusted less.

Id
MISSING_ARTICLE_DATE
Fix estimate
10 min per page
Low

No BreadcrumbList markup

Emit BreadcrumbList JSON-LD on pages below the top level so search results show the path instead of a bare URL.

Id
MISSING_BREADCRUMB_MARKUP
Fix estimate
10 min per page
Low

Missing character-encoding declaration

Declare <meta charset="utf-8"> early in <head> so text renders correctly everywhere.

Id
MISSING_CHARSET
Fix estimate
3 min per page
Low

No favicon found

Add a favicon — Google shows it next to your result on mobile, and browsers show it on every tab.

Id
MISSING_FAVICON
Fix estimate
10 min per page
Low

Missing Open Graph tags

Id
MISSING_OPEN_GRAPH
Fix estimate
5 min per page
Low

Organization markup has no logo

Add a logo property to the Organization block, pointing at a square image of at least 112 px.

Id
MISSING_ORGANIZATION_LOGO
Fix estimate
10 min per page
Low

Site identity not marked up

Add an Organization or LocalBusiness block naming who the site belongs to, so search engines can tie the pages to one entity.

Id
MISSING_ORGANIZATION_MARKUP
Fix estimate
15 min per page
Low

Organization markup has no sameAs links

List the brand profiles you control in sameAs, so search engines can confirm the entity against sources they already trust.

Id
MISSING_SAMEAS_PROFILES
Fix estimate
10 min per page
Low

Missing structured data (JSON-LD)

Id
MISSING_STRUCTURED_DATA
Fix estimate
15 min per page
Low

Missing Twitter/X Card tags

Add twitter:card, twitter:title, twitter:description and twitter:image so links shared on X show a preview instead of a bare URL.

Id
MISSING_TWITTER_CARD
Fix estimate
5 min per page
Low

Multiple meta descriptions

Id
MULTIPLE_META_DESCRIPTION
Fix estimate
4 min per page
Low

Multiple title tags

Id
MULTIPLE_TITLE
Fix estimate
4 min per page
LowEstimate

Headings are all questions, or none of them are

Both ends read badly: no questions makes a section hard to match to one, and nothing but questions reads as written for a machine.

Id
QUESTION_HEADINGS_OFF_BALANCE
Fires at
> 0.8 %
Fix estimate
20 min per page
LowYour call

The article is not signed by anyone

An engine cites what it can attribute: name the author and link the page that says who they are.

Id
UNATTRIBUTED_CONTENT
Fix estimate
15 min per page
components.priority.info

Meta description too long

Id
META_DESC_TOO_LONG
Fires at
> 160 characters
Fix estimate
3 min per page
components.priority.info

Meta description too short

Id
META_DESC_TOO_SHORT
Fires at
< 70 characters
Fix estimate
3 min per page
components.priority.infoYour call

No llms.txt

Reported for the record, with no recommendation attached: Google treats llms.txt as an ordinary text file, and large-sample analyses found no relationship with citations.

The site has no llms.txt, the proposed table of contents for AI assistants. We mention it because customers ask, and we have seen it change nothing: none of the large answer engines has confirmed reading it, and there is no evidence that having one does anything. This is an informational finding. If you want one, it is a few minutes of work and does no harm; if not, you lose nothing. The time is better spent making sure the answer crawlers may enter and the content is in the HTML.

Id
MISSING_LLMS_TXT
Fix estimate
30 min per page
components.priority.info

Missing meta description

Add a meta description of roughly 120–155 characters summarising the page.

Id
MISSING_META_DESCRIPTION
Fix estimate
4 min per page
components.priority.info

Markup for a rich result Google no longer shows

FAQ rich results were withdrawn in May 2026 and HowTo in 2023: the markup is harmless and earns nothing in Google. Keep it only if another engine uses it; do not add more.

Id
RETIRED_RICH_RESULT_MARKUP
Fix estimate
5 min per page
components.priority.info

Title longer than recommended

Trim the title to roughly 60 characters so it is not cut off in search results.

Id
TITLE_TOO_LONG
Fires at
> 60 characters
Fix estimate
3 min per page
components.priority.info

Title shorter than recommended

Expand the title with a few descriptive words so searchers know what to expect.

Id
TITLE_TOO_SHORT
Fires at
< 30 characters
Fix estimate
3 min per page
See it on your own site

Which of these would your site trip?

Read your site, free