Reviewed 30 September 2026 · quarterly cycle
Spreadsheet rot: how stale links quietly cost you money
Mistake one: copying a link from a chat preview
A chat preview is a rendering of an address rather than the address itself. Long addresses get ellipsised, wrapped across two lines, or made clickable by a client that inserts its own wrapper around the visible portion. Copy from the preview and you may capture a truncated string, a string with a line break inside it, or a string that resolves to a search page because the identifier at the end was cut off.
The failure is quiet, which is what makes it expensive. A truncated address often still resolves, just not to the listing you wanted, so the mistake surfaces at inspection rather than at paste time. By then the domestic leg is paid, an item is in a warehouse, and the cheapest fix is a return decision you did not plan to make.
The habit that removes this failure costs nothing: open the message, copy from the raw text rather than the preview, paste into an empty field, and confirm two things before saving. That the address is intact, with no space or line break inside it, and that the identifier at the end is the one you expect. Then save the identifier as its own field, because the identifier is the part that survives when the rendering does not.
Mistake two: trusting a short link
A short-form address is a redirect, and a redirect is a promise made by a third party that can be changed, expire, or be repointed without notice. It also hides the identifier completely, which means you cannot tell by looking whether it points at the listing you saved, a category page, or a campaign page assembled for a season that has since ended.
There is a second problem that only shows up during a migration. A short address is bound to the service that issued it rather than to the marketplace listing behind it, so it carries no portable information at all. When that service changes hands or winding down, the address is the first thing to break, and a list built primarily from short addresses has to be rebuilt from scratch rather than re-keyed.
Treat a short address as a lead rather than as a record. Resolve it once, expand it to the full marketplace address, and store the expanded form with the identifier extracted. If it will not resolve to a listing when you check it, the entry is worth dropping rather than keeping on hope, because an unresolved short address has no field you can verify and no key you can search.
Short addresses spread for sensible reasons: they survive chat clients without wrapping, they are quicker to paste, and they hide whatever tracking parameters the sharer appended. The last of those is also the cost. A short address conceals which marketplace it points into, so a list built from them cannot be sorted or filtered by source, and the one field that would let you judge the entry is the field it removed. Resolve at the moment you save rather than the moment you order. Resolution is free while the link is live and impossible once the redirect has been repointed.
Mistake three: editing SKU parameters by hand
A variant parameter is a string bound to one listing, usually encoding a size, a colour and sometimes a position in the seller's own option list. Editing it by hand feels harmless because the characters look interchangeable, and it is not harmless, because a parameter edited into another listing can still produce an order that looks valid and selects the wrong variant.
Two specific patterns produce most of these failures. The first is positional drift: a seller restructures their options, the third value becomes the second, and a parameter copied from an older version of the listing now selects something else. The second is cross-listing reuse: the parameter for a similar item from a different seller is copied across, its values happen to be syntactically valid, and the order goes through against a variant that was never offered.
The consequence lands at inspection, where the item that arrives is the wrong size or the wrong colourway and the record cannot prove what was ordered. Keep the parameter string exactly as recorded, never edit it by hand, and if the listing has changed since the row was saved, treat the row as needing re-verification rather than as ready to paste. A re-verification takes a minute; a wrong variant takes a return decision.
Two variant traps deserve naming, because both look harmless. Sizes and colours are frequently stored as positions in a seller's option list rather than as words, so a parameter that was correct against last season's ordering of options can select a different value against this season's. And colour names are not standardised between sellers, so a value that reads as the right colour can be syntactically valid on a listing where that name means something else entirely. Writing the variant out in words beside the parameter is the cheap defence: a human reading "size 43, black" beside a string catches a mismatch that the string alone hides.
Mistake four: assuming the domain is the seller
The domain in an address names the marketplace, not the seller. A marketplace hosts thousands of independent sellers, each with their own dispatch behaviour, packaging, tolerance for defects and return terms, and two listings on the same domain can differ on all four. Filing both under the domain is filing them under a fact that has no bearing on any of it.
The practical cost appears in your own notes. If your list keys rows by domain, then every note you write about dispatch speed, packaging quality or a return outcome attaches to the marketplace and becomes unusable for deciding between sellers. Renaming the field later does not recover the distinction, because the rows never carried it.
The seller identifier is the field that carries it, and it travels: it survives a re-listing, it survives a change of agent, and it is the same string the marketplace itself uses to group a seller's listings. Keep the domain for the record and the seller identifier for the judgement. Where a row has the domain and no seller identifier, it is a row you cannot evaluate, and marking it as such is more useful than filling the gap with a guess. One related case confuses people in the other direction: a store that renames itself keeps its identifier, so a familiar shop under an unfamiliar name is usually the same counterparty, while a brand new identifier trading under a familiar name is a different one. Reading the identifier rather than the name resolves both cases, and it takes one field to do it.
The correct habit
Four fields per row, each dated on the day it was saved: marketplace, item identifier, seller identifier, and the variant parameter as recorded. The display title stays as a human label and is never used as a key. The saved date is the fifth field and the one that makes the list maintainable, because it is what tells you which rows to re-check first.
Then a re-check rhythm. Anything older than a quarter gets opened and tested against the four fields before it is used, oldest first. This is a few seconds a row and it concentrates on exactly the rows where failure lives: in the links we re-checked from two quarters of saved lists, between a fifth and a quarter no longer resolved to the listing the row described, and short-form entries accounted for the majority of those failures.
The reason to bother is not tidiness, it is that link rot costs money at the moment you can least afford it. A dead link found while browsing costs a minute of searching. The same link found after the domestic leg is paid costs a return decision, a handling line and two weeks of calendar. The check is identical in both cases; only the timing differs, and the timing is the entire return on the habit.
The cadence should follow shipping rather than the calendar. Re-check the rows you are about to use, at the moment you assemble a parcel, and leave the rest alone until they come up. A quarterly sweep of the whole list is satisfying and mostly wasted, because most rows will not be used in the quarter they were swept. Tying the check to use means the rows that matter are always fresh and the rows that do not are never pretending to be. It also produces a natural triage: the rows you keep re-checking without ever using are the rows to delete.
What we measured ourselves
Of the saved links re-checked from two quarters of lists, between a fifth and a quarter no longer resolved to the listing the row described. Short-form addresses accounted for the majority of those failures, and failures clustered in rows saved more than two quarters earlier.
Basis: Our desk re-checked a set of links saved across two quarters, testing each for identifier resolution, seller match, parameter presence and listing identity against the row description. Ranges only; a convenience sample from our own saved lists.