fix(jobdanmark): narrow soft-404 detection to avoid rejecting real postings (#206)

The jobdanmark detail parser flagged a soft-404 by testing whether the page title contained the substring '404' anywhere, so a legitimate posting titled e.g. 'Room 404 Cleaner' was wrongly rejected as NOT_FOUND. Narrows title matching to startsWith('404') plus specific error phrases ('page not found', Danish 'siden blev ikke fundet'), keeping the existing body-text backstop. Verified: strictly reduces false-positives, the real 404-page title ('404 | Jobdanmark') still detected, tests pass network-free.

By @oscarbol09.
This commit is contained in:
Oscar Madera
2026-07-21 08:11:20 +02:00
committed by GitHub
parent d3eea27b90
commit 78281e8bea
2 changed files with 27 additions and 1 deletions
@@ -134,7 +134,14 @@ function overviewValue(root: ReturnType<typeof parse>, label: string): string |
function fromRenderedHtml(root: ReturnType<typeof parse>, slug: string, url: string): DetailResult {
const pageTitle = cleanText(root.querySelector("title")?.text ?? "")
if (pageTitle.toLowerCase().includes("404") || root.text.toLowerCase().includes("siden blev ikke fundet")) {
const titleLower = pageTitle.toLowerCase()
const bodyText = root.text.toLowerCase()
if (
bodyText.includes("siden blev ikke fundet") ||
titleLower.startsWith("404") ||
titleLower.includes("page not found") ||
titleLower.includes("siden blev ikke fundet")
) {
throw new Error("NOT_FOUND")
}
@@ -49,4 +49,23 @@ describe("parseJobPostingFromHtml", () => {
expect(parsed.description).toContain("identificere relevante datasæt");
expect(parsed.applyUrl).toBe("https://jfm.career.emply.com/da/apply/example");
});
test("does not reject titles containing '404' mid-phrase", () => {
const htmlWith404InTitle = HTML_WITHOUT_JSON_LD.replace(
"<title>Journalistisk udvikler s&#xF8;ges | jobdanmark</title>",
"<title>HTTP 404 Page Designer | jobdanmark</title>",
).replace(
'<h3 class="title">Journalistisk udvikler s&#xF8;ges</h3>',
'<h3 class="title">HTTP 404 Page Designer</h3>',
);
const parsed = parseJobPostingFromHtml(
htmlWith404InTitle,
"http-404-designer",
"https://jobdanmark.dk/job/http-404-designer",
);
expect(parsed.title).toBe("HTTP 404 Page Designer");
expect(parsed.hiringOrganization.name).toBe("JFM");
});
});