Skip to main content
Article

A Keyword Crawl Proves Presence, Never Absence: Lessons from Two Content Audits

5 min read 64 views

Crawling a website and searching every page for a term is the fastest way to audit content. It is also an easy way to report problems that do not exist. In two audits on a small service provider's website we maintain, a keyword sweep reported three missing topics that were all present, and missed three live claims that were all real. The tool worked as designed both times. The errors came from what the results were taken to mean.

Audit one: three gaps that were not there

The first audit compared the site with a competitor's site, another provider in the same sector, in another city. Its job was to find anything the competitor covered that this site did not. The method was to crawl every page and search for terms taken from the competitor. Three terms returned zero hits and were reported as gaps.

Complaints. The search used the everyday term for a confidential adviser. Zero hits. But under the sector's legislation that is a different role altogether, not the one the complaints rules describe. The complaints route was fully documented on the quality page, in three steps: an internal callback within five working days, an independent external complaints officer reachable without going through the provider, then the disputes committee, with a downloadable procedure. It was described with the sector's formal legal term for the role, which the search did not use.

Independent client support. The search term was the formal name for publicly funded, independent advice on choosing a provider. Zero hits. The point behind it was that a client should feel free to get advice without commitment. That message was on many pages, in phrases such as "free, no-obligation introductory visit" and "contact us even if you are not yet sure what you need". It does not use the formal term, because it is the provider speaking, not the public body.

Cultural background. The competitor's About page mentioned respect for cultural differences. Zero hits on this site. This one was closed on principle: a service built around the individual already respects each person, and naming one group narrows who the site appears to be for.

Three out of three, and all the same mistake: a term with no matches was reported as a missing topic, instead of reading the page where that topic would be.

Audit two: three claims the sweep missed

The second audit asked the opposite question: find every promise the site makes about response times, so they could be checked against what the provider actually commits to. A regular expression over the visible text of every page found most of them. It missed three, because they were not in the visible text:

  • A meta description promised contact within 24 hours. It never renders on the page, but it is what a visitor reads in Google's search results before clicking.
  • Structured data. An answer about urgent requests was rendered in an FAQ accordion and also published in the page's FAQPage JSON-LD. The visible copy had been edited. The JSON-LD still carried the old figure.
  • The chatbot's system prompt offered a callback within 24 hours, regardless of what the site said.

The same audit also reported two contradictions between figures that were not contradictions. "Telephone contact within five working days" was step one of the complaints procedure, not the response to a service request. "An introductory meeting within 48 hours" answered the question "What does the recruitment process look like?". Both figures matched the regular expression, but neither described the event they were compared against. The heading above each one would have shown that.

The rules we work to now

  • Zero hits means "not found with this word", nothing more. Before reporting something as missing, search the synonyms the sector actually uses, open the section where it would be, and read it. Ask whether the same reassurance is already given in other words.
  • Cover every layer that carries text. Visible copy, <meta> tags, JSON-LD, email templates and any chatbot prompt. A promise in a search result or a bot reply is still a promise.
  • Read the nearest heading before pairing two figures. A string match tells you where the words are, not which event they describe.
  • Read the whole result before quoting a count. In one run a truncated tool output was reported as a total: about half the pages carrying a review link, when in fact every page carried one.

The same mistake closer to home

We have produced this kind of false result on our own site too. In June 2026 an SEO audit of pinuno.com.gh reported missing alt text on several pages. The attributes were there, written across multiple lines, so a single-line search did not see them. It was the same kind of false positive as the three gaps above.

The same thing happens outside content. In September 2026 the mail log on our server looked empty. There was no /var/log/mail.log, because the syslog rule that writes it was commented out; the mail server logged only to the systemd journal; and the account reading it was not in the journal's group, so a plain journalctl printed nothing. It looked like a quiet log, not a permissions problem. An empty result is only evidence if something would have written there and you could have read it.

Automated guards fail the same way. In September 2026 we found two checks in the test suite of our energy management product that scanned a root path which resolved to nothing. Both passed, because "no findings" is also what a clean run looks like. Every sweeping guard there now asserts how much it examined: a floor on the set of files it looked at, never on the findings, because a floor on the findings would demand that violations exist before the run could pass.

Conclusion

A crawl tells you where a word occurs. Whether a topic is covered, or what a sentence promises, still has to be found out by reading the page. Every one of the six errors above would have been caught by opening the page in question.

If you want to learn to build and audit PHP web applications like this one, have a look at our PHP Application Developer course.

C

Chrystal Akyempon

Related Articles

Article Info

Type
Article
Category
Web Development
Published
02 Oct 2026
Reading time
5 min

Search

Put this into practice

Our structured courses take these topics from article to hands-on skill, taught by the practitioners who write them.

Browse Courses