A worked specimen: a fictional family law firm, scored
This is a reading of the specimen firm's own pages, rendered so you can read the whole report without running anything. The specimen is fictitious and the pages are marked as a specimen. In this specimen report it reads 64 out of 100, in the Partly citable band: it states its niche, its services, its location and its credentials, but it carries no schema.org markup, no FAQ and no exclusions, which is where a real firm usually starts. A live reading of the same fixture can differ by a point or two, because the live pages are re-fetched rather than read from the saved copy.
Every named answer-engine crawler is allowed to read the site.
Fix: Keep the explicit Allow lines for the named crawlers in place as the site changes.
The site publishes an llms.txt, a curated index that answer engines can read directly.
Fix: Refresh llms.txt when services or pages change so it stays accurate.
The homepage body text is in the raw HTML, so a crawler that does not run scripts still reads it.
Fix: Keep the core copy server-rendered as the site changes.
The page carries no schema.org JSON-LD, so a machine has only prose to read.
Fix: Add a JSON-LD block naming the schema type that matches this firm (AccountingService for an accountant, LegalService for a law firm, InsuranceAgency for a broker, MedicalClinic for a clinic), plus name, address and telephone.
The site has no FAQ or question-and-answer content, which is what answer engines most often quote.
Fix: Add a short FAQ (five to ten real client questions) marked up as FAQPage JSON-LD.
The site states who it works with, which is the fact a model needs before it can name the firm for a query.
Fix: Name the exact audience and the revenue or matter size in the same sentence, and repeat it on the about page.
The services are a detectable, named list, which answers "what do they do" in one read.
Fix: Name each service in the same words a client would search.
The site never says who it does not act for, so a model has no boundary to match a client against.
Fix: Add one sentence on the homepage or services page naming who the firm does not act for, for example "We do not act for large listed companies".
The site states where the firm is and what it serves, and the phone number agrees across the pages read.
Fix: Keep the address, suburb and phone identical on every page and in the same JSON-LD block.
The site names a registration number or a professional body, which a buyer and a model both treat as a trust signal.
Fix: State the registration or licence number and the professional body by name, and name the people who hold them.
The title, the meta description and a single H1 are present and the trade is named, which is what a search result and a model preview read first.
Fix: Set one title under 60 characters, one meta description under 160, and exactly one H1, and name the trade in the title.
The page has a logical outline of H2s under the H1, which is how a machine sees the structure of the content.
Fix: Write the content as sections with H2 headings under the H1, and put the words in text rather than images.
A phone number or email is a machine-readable link, so it can be surfaced in an answer.
Fix: Add a clickable tel: link and a mailto: link in the header and footer of every page.
The content carries a visible date, so it reads as current to a buyer and to a model.
Fix: Add a visible "Reviewed and updated" date to each content page, and keep it true.
The sitemap check runs on a live read and was not applicable here.
Fix: Publish an XML sitemap at /sitemap.xml and reference it from robots.txt.
Content-type is read on a live fetch and was not applicable here.
Fix: Serve every page as text/html.
Without a canonical tag, a duplicate address can split the page across two URLs.
Fix: Add a self-referencing rel=canonical link in the head of every page, pointing at the one address you want indexed.
Some social preview tags are missing, so a shared link shows a bare or wrong preview.
Fix: Add og:title, og:description, og:image (1200x630) and a twitter:card to every page.
The opening paragraph is 26 words, so it is not the self-contained 40 to 60 word answer an answer engine prefers to quote.
Fix: Open each key page with a 40 to 60 word answer to the question the page targets, in one self-contained paragraph.
The headings are statements, so they match how the firm writes, not how buyers ask.
Fix: Rewrite some H2 headings as the questions buyers actually type, and answer each one directly underneath.
No BreadcrumbList, so a machine has to infer where the page sits in the site.
Fix: Add a BreadcrumbList JSON-LD block to every page, matching the page hierarchy.
The firm has no reachable about or entity page with its details, so a machine cannot confirm who it is.
Fix: Add an About page with the legal name, address, phone and what the firm does, link it from the nav and footer, and give it Organization structured data.
The page has few internal links, so its related pages are not connected for a machine.
Fix: Link each page to the related pages on the site (services, about, FAQ, locations) so the cluster is visible.
The structured data carries no dateModified, so a machine cannot confirm the page is current from the markup.
Fix: Add dateModified to the page's JSON-LD and keep it equal to the visible reviewed date.
There are no images to describe.
Fix: Give every image a descriptive alt attribute.
The page declares a mobile viewport, so it renders on a phone.
Fix: Add <meta name="viewport" content="width=device-width,initial-scale=1"> to every page.
Read what each check reads, or run the audit on your own address.