GEO issue reference

Every issue Synviber's GEO scan can report, generated from the same check definitions the scan itself runs. Each page below covers what the check looks at, why AI answer engines care, how to fix it manually, and whether Synviber can generate a fix for it.

Site unreachable

SITE_UNREACHABLE

Whether the GEO crawler could connect to the site at all before running any other check.

robots.txt is missing

ROBOTS_MISSING

Whether /robots.txt exists at the site root.

robots.txt blocks the entire site

ROBOTS_BLOCKS_ALL

Whether robots.txt disallows the whole site (a blanket Disallow: / for all user agents).

robots.txt blocks a live AI crawler

ROBOTS_BLOCKS_AI_CRAWLER

Whether robots.txt disallows any of the AI crawlers that fetch and cite content live — blocking a training-only crawler (GPTBot, ClaudeBot, CCBot, and similar) does not trigger this check, since that's a legitimate, product-endorsed choice.

robots.txt has no Sitemap: directive

ROBOTS_MISSING_SITEMAP_DIRECTIVE

Whether robots.txt declares a Sitemap: directive, independent of whether /sitemap.xml itself is reachable.

llms.txt is missing

LLMS_TXT_MISSING

Whether /llms.txt exists.

llms.txt is empty

LLMS_TXT_EMPTY

Whether llms.txt returns a 200 response but its body is empty or whitespace-only.

sitemap.xml is missing

SITEMAP_MISSING

Whether /sitemap.xml exists.

sitemap.xml is not valid XML

SITEMAP_MALFORMED

Whether an existing sitemap.xml can actually be parsed as XML.

sitemap.xml lists zero pages

SITEMAP_EMPTY

Whether a well-formed sitemap.xml contains any <url><loc> entries at all.

Missing Organization/WebSite JSON-LD

JSON_LD_MISSING

Whether any crawled HTML page declares Organization, WebSite, or LocalBusiness JSON-LD structured data.

Missing SoftwareApplication JSON-LD

SOFTWARE_APPLICATION_SCHEMA_MISSING

Whether any crawled HTML page declares SoftwareApplication JSON-LD.

JSON-LD is missing alternateName

ALTERNATE_NAME_MISSING

Whether an existing Organization or Product JSON-LD block declares any `alternateName` values. Only checked once an Organization/Product block already exists.

FAQ content is missing FAQ schema

FAQ_SCHEMA_MISSING

Whether a page that looks like FAQ content (per scorer.py's heading-pattern heuristic) declares FAQPage JSON-LD.

JSON-LD is missing required fields

JSON_LD_INCOMPLETE

Whether a JSON-LD block of the right @type is not just present but actually has its required fields populated. Only fires when a matching block already exists — an absent block trips the corresponding *_MISSING code instead.

Organization JSON-LD is missing sameAs

SAME_AS_MISSING

When the crawler found profile-shaped social links on the site but no Organization JSON-LD block declares any `sameAs` entry.

Content freshness is unknown

CONTENT_FRESHNESS_UNKNOWN

Whether any JSON-LD on the site declares `dateModified` or `datePublished`. Only checked once the site has some JSON-LD at all — a site with none is already flagged by JSON_LD_MISSING. Deliberately does not look at HTTP Last-Modified headers, which are an unreliable freshness signal in practice.

Page content is too thin

THIN_CONTENT

Whether a page's script/style-stripped text is under scorer.py's minimum character threshold and has no headings — a page can look complete in a browser and still trip this if the real content only renders after client-side JavaScript runs.

Missing meta description

META_DESCRIPTION_MISSING

Whether a page declares a meta description.

Missing <title> tag

TITLE_MISSING

Whether a page has a non-empty <title> tag.

Missing canonical URL

CANONICAL_URL_MISSING

Whether a page declares a <link rel="canonical"> tag.

Broken links found

BROKEN_LINKS

Whether any crawled internal link returns an HTTP status code of 400 or above.

Images missing alt text

IMAGE_ALT_MISSING

Whether any images on a page are missing alt text (counted per page, not just present/absent).

Missing <html lang> attribute

HTML_LANG_MISSING

Whether a page's <html> tag declares a `lang` attribute.

Missing og:title tag

OG_TITLE_MISSING

Whether a page declares an og:title Open Graph tag, independent of whether <title> is present.

Missing og:description tag

OG_DESCRIPTION_MISSING

Whether a page declares an og:description Open Graph tag, independent of whether the meta description is present.

Page does not open with a direct answer

CONTENT_ANSWER_NOT_FIRST

Whether the first paragraph of a long English page is a short, direct answer or definition, rather than a very short tagline, a very long preamble, or a filler opener such as "Welcome to" or "In today's".

No question-style headings

CONTENT_NO_QUESTION_HEADINGS

Whether a long English article with at least four H2/H3 headings has any heading phrased as a question. This check is advisory and only applies to article-like pages.

Heading structure is hard to follow

CONTENT_HEADING_STRUCTURE

Whether a long page (600+ words) has exactly one H1, at least two H2 sections, and no skipped heading level such as an H2 followed directly by an H4.

Sections or paragraphs are too long

CONTENT_LONG_SECTIONS

Whether an article-like page has a section between headings of more than 350 words, or a median paragraph longer than 110 words. Legal pages such as terms and privacy are exempt.

Long article has no lists or tables

CONTENT_NO_LISTS_OR_TABLES

Whether an article-like page of 800+ words contains no bulleted or numbered lists and no tables. This check is advisory.

Text reads at a high grade level

CONTENT_READING_LEVEL

Whether the main text of a long English page reads above Flesch-Kincaid grade 14, estimated from sentence length and syllable counts. The estimate is heuristic and can be off by one or two grades.

No plain statement of what the site is

CONTENT_NO_DEFINITION

Whether the opening text of the homepage, a product page or an About page states in one plain sentence what the brand is (for example "Acme is a ... that helps ..."). It is skipped when no brand name can be derived.

Article has no named author

TRUST_AUTHOR_MISSING

Whether an article-like page shows a named author byline or declares an author in its JSON-LD. A byline that names the organisation counts as present.

Author byline has no author page

TRUST_AUTHOR_PAGE_MISSING

Whether a page that shows an author byline links it to an author page or profile, or declares a Person with a url or sameAs profile in JSON-LD. A link to the About page counts.

No About page found

TRUST_ABOUT_PAGE_MISSING

Whether any crawled page, or any navigation or footer link on the homepage, points to an About, Company, Team or similar page. It is skipped when the homepage exposes too few links to judge.

No way to contact the site owner

TRUST_CONTACT_MISSING

Whether the site offers any contact route: a Contact or Support link in the navigation or footer, a mailto or tel link, an address element, or JSON-LD contact details. It is skipped when the homepage exposes too few links to judge.

Long article cites no external sources

TRUST_NO_OUTBOUND_CITATIONS

Whether an article-like page of 600+ words links to no external site at all from its main content. Links marked nofollow, ugc or sponsored do not count, and the quality of the linked sites is not judged.

Article shows no publication or update date

TRUST_DATES_MISSING

Whether an article-like page shows a published date (visible, in meta tags or in JSON-LD), and whether a page published more than 12 months ago also shows a last-updated date.

Homepage names the organisation inconsistently

TRUST_ORG_IDENTITY_MISMATCH

Whether the names found on the homepage (JSON-LD name, og:site_name, the first part of the title, the footer copyright name) share no word with each other. At least two sources are needed, and alternateName values count as matches.

Health, finance or legal content lacks author or sources

TRUST_YMYL_UNDERSOURCED

Whether an English article-like page covers a health, finance, legal or safety topic (at least three distinct terms from a fixed list in its main text, or matching JSON-LD) and has no named author or no external source cited. Wording is advisory: the page "may be treated as" YMYL.

No privacy or terms links on the homepage

TRUST_POLICY_PAGES_MISSING

Whether the homepage's footer or navigation links to a privacy policy, terms or policy page. It is skipped when the homepage has no footer.

Nested pages have no breadcrumbs

NAV_BREADCRUMB_MISSING

Whether a site with at least three crawled pages two or more levels deep has any breadcrumb markup or BreadcrumbList structured data on them. It fires once per site and is not evaluated in the free scan.

Sitemap URLs not linked from any crawled page

NAV_ORPHAN_SITEMAP_URLS

Whether at least three sitemap URLs, and at least 10% of them, are not linked from any page the crawler fetched. It runs only on a full scan with a deep enough crawl and a plain URL sitemap, never on a sitemap index.

Homepage links to very few pages

NAV_HOMEPAGE_LINKS_SPARSE

Whether the homepage's HTML links to fewer than three distinct other pages on the same site. One-page sites with long content and in-page anchors are skipped.