Notifio is a desktop app that watches rental search pages and emails you when a new listing appears. Its marketing site is 38 URLs: ten pages typed out by hand, fifteen per-site pages, five comparisons, five guides and three audience pages, all generated from arrays in the repository.

I have measured the link graph of a sister site from its registry and then from its HTML, and the two disagreed. So this time I skipped the arrays and only read what is actually served.

The method, which is four lines

Fetch all 38 URLs out of the sitemap, pull every href that starts with /, drop the asset and /_next paths, and count where they land.

pages fetched 38 page-to-page link instances 1,030 fewest on one page (/help) 18 most on one page (the homepage) 40 

Eighteen is the floor because the header and footer are on every page and between them they offer fifteen destinations. That matters for everything below: before a page says anything of its own, it has already linked to the same fifteen pages as every other page.

Inbound links per page, all 38

37 / 7 /alerts/openrent 37 /pricing 7 /alerts/idealista 37 /download 7 /alerts/housinganywhere 37 /alerts 6 /alerts/huurwoningen 37 /compare 6 /guides/first-message-to-a-landlord 37 /guides 5 /alerts/zoopla 37 /help 5 /alerts/wg-gesucht 37 /about 5 /alerts/spotahome 37 /terms 5 /compare/rentbird 37 /privacy 5 /compare/rentslam 37 /alerts/kamernet 5 /compare/stekkies 37 /alerts/pararius 5 /guides/rental-scams-netherlands 37 /alerts/funda 4 /alerts/roommatch 37 /alerts/rightmove 4 /alerts/immobilienscout24 37 /alerts/spareroom 4 /alerts/facebook-marketplace 4 /compare/visualping 4 /for/expats 4 /for/amsterdam 4 /guides/rental-documents-checklist 3 /for/students 3 /guides/how-fast-do-rental-listings-go 3 /guides/how-to-be-first-to-a-rental-listing 1 /compare/rentola 

Fifteen pages are linked from all 37 others. They are the fifteen in the header and footer, which is the same thing said twice: a page in the chrome is a page every other page links to, and nothing else on the site can compete with that.

The remaining 23 pages live on between one and seven links. The spread inside that group is not a ranking of anything, it is an accident of which sibling arrays happen to name them, and one page is at the bottom of it on its own.

/compare/rentola has exactly one way in

One inbound link, from the comparison hub. Every other comparison page has four or five.

The cause is in the data. Each comparison names three siblings:

// rentbird related: ["rentslam", "stekkies", "visualping"], // rentslam related: ["rentbird", "stekkies", "visualping"], // stekkies related: ["rentslam", "rentbird", "visualping"], // visualping related: ["rentbird", "rentslam", "stekkies"], // rentola related: ["rentbird", "rentslam", "stekkies"], 

Rentola was written after the other four. It names three of them, and not one of the four names it back, because when they were written there was nothing to name. Adding a page to this site is one entry in one array, which is the property that makes the pages cheap to add, and the cost of that property is that the entry can only describe links going out.

Four of the five arrays are also missing a name they could have had. Each lists three of the four possible siblings, so the page added last is the one every earlier page had no reason to mention. The link graph records the order the pages were written in, which is not information any reader wants.

Is one link a problem?

Less than it looks, and more than nothing.

The hub is in the header on all 38 pages, so Rentola is two clicks from anywhere and a crawler reaches it on the first pass. It is also in the sitemap, which is generated rather than typed, so it cannot be left out by hand. This is not an orphan.

What it loses is the sideways traffic. A reader on the Rentbird page is reading about a paid rental alert service and is one scroll from three more comparisons, none of which is Rentola. Those sibling links are the only part of this site that gets somebody from one comparison to the next, and Rentola is excluded from all of them while linking out to three.

The honest summary is that the page is reachable and unrecommended, by nobody's decision.

The fix is to stop writing it by hand

Two options, and I want the second.

The small one is to add "rentola" to the other four arrays. That fixes today and leaves the next page in exactly the same position, because the sixth comparison will arrive to five arrays that cannot know about it.

The real one is to make the reverse edge free. The page already has a function that resolves names to pages:

export function relatedTargets(target: CompareTarget) { return target.related .map(getCompareTarget) .filter((t): t is CompareTarget => t !== undefined); } 

If that also returned every target whose own related names this one, the arrays stay as short as they are, no author has to remember to edit four other entries, and a new page becomes visible to its siblings the moment it names them. Links are a graph; one direction of it was being typed twice and the other direction was not being typed at all.

Then a test, because this site's suite runs TypeScript directly with no build step and a graph assertion is four lines:

it("every page has an inbound link that is not its hub", () => { for (const target of COMPARE_TARGETS) { const inbound = COMPARE_TARGETS.filter((t) => t.related.includes(target.slug)); assert.ok(inbound.length > 0, `${target.slug} has no sibling pointing at it`); } }); 

That is the version of this measurement that runs on every commit instead of on the day I feel like fetching 38 pages.

What I would tell anybody with a generated site

The number worth measuring is not how many internal links you have, it is how many each page receives. Outbound links are written by an author who is looking at the page, so they are always plausible. Inbound links are the sum of decisions taken on other pages, usually before this page existed, and nobody is looking at that sum. Mine was a single integer away from being fine, and I only found it because I counted.

The pages themselves are worth a look if you are weighing up rental alerts: the fifteen site guides start at notifio.app/alerts, the comparisons including the one with one link are at notifio.app/compare, and the app is a one-time licence with Windows and Mac installers.