topsites.dev

The method

Plumbline

A plumbline is the oldest tool for finding true vertical. You cannot argue with one, because gravity does the work. That is the claim this ranking makes: the order of the list is not a matter of opinion, and it is not a matter of who scripted the hardest.

Six stages, applied in order. Two of them judge each visitor as they arrive and are written permanently onto the event row. Four run every 5 minutes over the accumulated totals. The settings shown beside each stage are the engine defaults; a network can differ, and the numbers a network actually uses are published on its own method page.

What each action is worth
ActionWeightMeaning
Visit receivedx 0.2 Somebody arrived on the listing page from outside.
Player sent onx 1.0 Somebody clicked through to the server itself. Worth five times a visit.
Votex 3.0 A deliberate act, once per cooldown, per person.

Weights are applied when the score is read, not baked into the stored event, which is why changing one takes effect on the next recalculation instead of requiring a replay.

Stage by stage

The six stages

  1. 1

    Provenance as it happens

    Anonymous visitors are pinned by network and cookie together, so clearing cookies buys nothing and neither does reconnecting on a new address. Both have to change at once to look like a new person, which is work, and work is the point.

    Automated clients score zero. They are still recorded, with the reason written on the row, because an event that vanishes is an event nobody can audit. Traffic arriving with no referrer is halved rather than discarded: plenty of real people arrive that way, from a chat client or a bookmark, and throwing them out would punish honest listings to spite dishonest ones.

    Traffic with no referrer counts x 0.5
    Automated clients count x 0
    Repeat visit ignored within 60 min
    Repeat click-through ignored within 60 min
  2. 2

    Saturation as it happens

    The m-th event from a single /24, or a /48 on IPv6, inside the window is worth 1 divided by the square root of m. Two hundred addresses in one hosting range are worth about fourteen visitors.

    That shape is chosen rather than a flat cap. A cap has an edge to sit just underneath. A square root has no edge: the cost of the attack rises in a straight line while the benefit rises as a square root, and the two curves never cross. A genuine student hall or office behind one address loses a little, which is the price of the property, and it is a smaller price than the alternative.

    value of the m-th event from one network = 1 / sqrt(m)
    Grouped by IPv4 /24, IPv6 /48
    Window 24 hours
    Curve sqrt
    Counted per network at most 25 events
  3. 3

    Gravity every recalculation

    Every total decays continuously toward zero on a half-life. A listing that was busy last month and quiet since falls past one that is busy now, without anybody deciding that it should.

    The reset that most toplists use is a date on a calendar, and a date on a calendar is a thing to plan a burst around. A half-life has no date to aim at. It is also a single multiply per listing, so a listing with four years of history costs exactly as much to rank as one registered this morning.

    D <- D * 2 ^ (-elapsed / halfLife)
    Half-life 7 days
    Recalculated every 5 minutes
    Cost per listing per tick one multiply
  4. 4

    Cadence every recalculation

    The score is multiplied by how much of the recent window the listing was actually active for, floored so that a quiet week cannot erase a listing outright.

    This is what makes a purchased burst self-defeating. The burst raises the total and lowers the active-day ratio at the same time, and the two movements largely cancel. Spending the same money spread over a fortnight would work better, and spending a fortnight actually running a server people return to works better still, which is the outcome the whole design is arranged around.

    x max(cadenceFloor, active days / window days)
    Window 14 days
    Floor x 0.6
    New listings exempt for 7 days
  5. 5

    Ballast every recalculation

    The score is multiplied by n over n plus a prior, where n is the number of distinct people behind the events. Three enthusiastic votes must not outrank three hundred, and without this they can, because three votes with a good ratio look excellent right up until you ask how many there were.

    The effect fades as evidence accumulates. At ten distinct visitors the prior is doing half the work; at four hundred it is doing almost none.

    x n / (n + priorK)
    Prior 10 distinct visitors
    Effect at n = 10 x 0.500
    Effect at n = 400 x 0.976
  6. 6

    Plumb check every recalculation

    The last stage looks at the shape of a listing's traffic rather than its size: visitors that arrive and never click through, activity that appears and vanishes, a ratio that no real audience produces.

    It flags, it never subtracts. An automatic penalty would be a weapon, because anyone can aim fake traffic at a rival and let the ranking do the damage for them. So the sixth stage raises a hand and a human decides, and the listing keeps its score in the meantime.

    Click-through ratio below 0.05
    Ignored under a sample of 200 events
    Measured over 14 days
    Effect on score none, it flags only

The receipt

Every listing publishes its own derivation

Not a summary of the method, the actual arithmetic for that listing, on that listing's page, visible without an account.

The second block is the point. Two hundred and one events arrived and did not count, and the listing says so in public, broken down by reason. Most toplists cannot show this because they never recorded it. Rejected events are stored here with the reason on the row, so the rejection is as auditable as the acceptance.

What this does not stop

Somebody with a large pool of residential addresses, realistic browsers and human-looking timing can still push a listing up. No scoring method stops that, and any list that tells you otherwise is selling something.

What happens instead is that the traffic stops making sense. Visitors who never click through, activity that appears and vanishes, a ratio no real audience produces, and the sixth stage refers it to a person. We would rather write that down than claim a guarantee we cannot keep.

Tuning

Two kinds of change

Weights and curves

Weights, half-life, prior and cadence floor apply on the next recalculation. No replay is needed, because they are applied at read time rather than stored on the event.

Judgements

Dedupe windows, the saturation curve, the no-referrer factor and the vote cooldown decide what an event was worth when it arrived. Changing one affects new events only, until every stored event is re-judged and the scores replayed from the raw history.

Materialised scores are never authoritative. Everything in them can be rebuilt from the raw events, which is exactly what makes an incremental recalculation safe to rely on.