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
Whether the GEO crawler could connect to the site at all before running any other check.
ROBOTS_BLOCKS_ALL
Whether robots.txt disallows the whole site (a blanket Disallow: / for all user agents).
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_MISSING_SITEMAP_DIRECTIVE
Whether robots.txt declares a Sitemap: directive, independent of whether /sitemap.xml itself is reachable.
LLMS_TXT_EMPTY
Whether llms.txt returns a 200 response but its body is empty or whitespace-only.
SITEMAP_MALFORMED
Whether an existing sitemap.xml can actually be parsed as XML.
SITEMAP_EMPTY
Whether a well-formed sitemap.xml contains any <url><loc> entries at all.
JSON_LD_MISSING
Whether any crawled HTML page declares Organization, WebSite, or LocalBusiness JSON-LD structured data.
SOFTWARE_APPLICATION_SCHEMA_MISSING
Whether any crawled HTML page declares SoftwareApplication JSON-LD.
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_SCHEMA_MISSING
Whether a page that looks like FAQ content (per scorer.py's heading-pattern heuristic) declares FAQPage JSON-LD.
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.
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_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.
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.
BROKEN_LINKS
Whether any crawled internal link returns an HTTP status code of 400 or above.
IMAGE_ALT_MISSING
Whether any images on a page are missing alt text (counted per page, not just present/absent).
HTML_LANG_MISSING
Whether a page's <html> tag declares a `lang` attribute.
OG_TITLE_MISSING
Whether a page declares an og:title Open Graph tag, independent of whether <title> is present.
OG_DESCRIPTION_MISSING
Whether a page declares an og:description Open Graph tag, independent of whether the meta description is present.
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".
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.