Skip to content
TidyKB

The scan and the health score

What a TidyKB scan checks, how the health score is worked out, and the cases where a scan deliberately refuses to claim that something is broken or fixed.

Updated

A scan walks your Freshdesk knowledge base through the API, in every portal language, runs eleven checks over what it read, and stores one row per finding. It writes nothing. A read-only key is all it ever needs.

This page explains what the checks are, how the number at the top of the page is worked out, and — just as important — the cases where a scan deliberately refuses to tell you something.

Full scans and daily top-ups

A full scan reads every category, folder and article in every language your portal serves. It is the only kind of scan that produces totals and a score, and the only one that can conclude an article has been deleted — because it is the only one that has seen everything.

A daily top-up, on plans that include it, re-reads only the articles Freshdesk says changed since the last scan. It refreshes the findings of those articles — including marking them fixed — and leaves every other article's findings exactly as the last full scan left them. It has no score of its own; the dashboard keeps the last full scan's numbers.

When the two are due together, the full scan wins, and it counts as that day's top-up too.

The eleven checks

CheckSeverityFires when
Broken linkHighA link or iframe whose target answered as broken
Link to a dead articleHighA link into your own help center whose target article is deleted, still a draft, or not published in the language the link asks for
Broken imageMediumAn image whose address answered as broken
Near-duplicateMediumTwo articles in the same language with near-identical titles and bodies sharing at least half their distinct words
Missing translationMediumA primary-language article with no published version in any other portal language
Outdated translationMediumA published translation whose primary article has changed since the two were last in sync
Old termMediumA word from your own old-term list appears where find & replace could change it
StaleLowThe article has not been updated for 12 months, and it is not a changelog
Old yearLowA year two or more years in the past appears in the title or the prose
Empty folderLowA folder with no published article in the primary language and no subfolders
Draft never publishedLowA draft version untouched for more than 90 days

A few of these are fussier than they look, on purpose. "Old year" ignores copyright lines, version numbers, release notes, ISO standards, dates in URLs, "since 2019", "Windows Server 2019" and about twenty other shapes that were false positives when we ran the rules over twenty real help centers. "Near-duplicate" refuses to flag an article and its own translation, titles that differ by a number, or two pages that merely share a title.

Old term has nothing to look for yet

The old-term check reports words from a list you give us — an old product name, a renamed plan — and there is no editor for that list in the app yet. Until there is, it finds nothing. It is not "your wording is fine"; it is "we were given nothing to look for". A find & replace is the way to change such a term today.

How the score is worked out

For every published article version, each check that fired costs points by severity: high 3, medium 2, low 1. Two findings of the same kind on one article are the most that kind can cost — 40 broken links in one article still count as two — and one article can never cost more than 6 points in total, so one dreadful article cannot sink the whole help center.

The score is the average article's penalty measured against that 6-point ceiling, subtracted from 100. An article at the ceiling scores 0; a knowledge base with no findings scores 100.

Three details follow from that:

  • Drafts and folders never move the score. A draft is not a page a reader can reach, and an empty folder belongs to no article. Both are still in the list.
  • Translations count as articles. Every published version in every language is a page somebody reads, so each one is scored.
  • The score is always measured over a set of checks, and that set is stored with it. Two scores are only comparable over the same set.

That last point is why a trend sometimes shows a dash instead of a number. If your last scan could measure eleven checks and this one could measure eight, the difference between the two scores is not a change in your help center, and printing it would be a lie. So we do not print it.

What a scan refuses to claim

Three checks — link to a dead article, empty folder, draft never published — work by absence: they conclude something is wrong because an article is not there. They only run when the scan can vouch that it read the whole knowledge base. They are switched off, and the scan says so in plain words, when:

  • Your plan's article limit stopped the scan early. Links pointing at articles it never read are not reported as dead.
  • Freshdesk did not return every page in a language. Missing and outdated translations are not reported for that language, and existing findings for it are left open rather than marked resolved.
  • Freshdesk no longer supports a language your portal used to have. Nothing is scanned in it.
  • It was a daily top-up, which by definition did not look at everything.

The same caution applies in reverse: a scan that did not run a check may not mark that check's old findings as fixed either. We never tell you an article is gone when we simply did not read it.

A separate tab from the issues, and never counted in the score. A URL lands there when nothing came back that proves anything: a 401 or 403, a 429, a 5xx, a timeout, a sign-in wall, a domain that does not exist, or an address on an unusual port we do not open. Each line says which article it came from, what happened, and when it was last tried.

Many of them are fine — an intranet page, a partner portal behind SSO. Some are genuinely broken for your readers too. The point is that we do not guess.

Running a scan yourself

The Scan now button on the health scan page starts a full scan immediately. There is a five-minute cooldown after the previous one, only one scan of a connection runs at a time, and a manual scan counts as that day's scheduled run, so it never costs you an extra one.

When a scan can't start, the page says which of those it is.

Freshdesk and Freddy are trademarks of Freshworks Inc. TidyKB is an independent product and is not affiliated with, endorsed or sponsored by any company named on this page.

FAQ

Questions, answered

Why did my score change when nothing changed in the help center?

A score only means something together with the set of checks it was measured over. Adding a portal language switches the translation checks on; a scan clipped by your plan’s article limit, or one that could not read a language, switches the three checks that infer deletion off. When the sets differ, TidyKB shows a dash instead of a trend rather than comparing two different measurements.

Does ignoring an issue improve the score?

No. The score is computed by the rules over your articles at the moment of the scan, before anything you have ignored is taken into account. Ignoring changes which rows you see in the issue table and the open count, never the number on the dashboard.

Why is a link in “Links we couldn’t check” and not in the issues?

Because we did not get a usable answer. A 401, 403, 429 or 5xx, a timeout or a sign-in wall proves nothing about whether the page exists, and we refuse to fetch some addresses at all, such as unusual ports. Those links are listed separately with the reason and never counted as broken.

Does a daily scan produce a score?

No. Only a full scan reads the whole knowledge base, so only a full scan has totals and a score. A daily top-up re-reads the articles that changed and refreshes their findings; the dashboard keeps the last full scan’s numbers.

See your help center’s score.

Paste a URL. No signup, no API key, no call.

Run free audit