The Cheap Enrichment That Cannot Work
Finding a picture for an article is usually easy and deterministic: fetch the page, read the social-preview tags out of its head, done. No model, no guessing, one small request. So when most cards lacked pictures, the obvious move was to run that pass over them.
It cannot work on the rows that need it, and the reason is worth understanding precisely rather than as a rule of thumb. A large share of the delivered articles are not the publisher's page at all — they are an aggregator's redirect wrapper, a page whose only purpose is to bounce a browser onward. Its preview tags describe the aggregator, not the article. Probing one returns a picture, technically. It is the aggregator's own logo, byte-identical on every such page.
Measure the Negative Result Properly
This is a nice example of a measurement whose entire value is a negative. Probing a handful of these wrappers and comparing the returned image URLs takes minutes, and it converts a plausible plan into a closed question: the wrappers are not merely unhelpful, they are uniformly unhelpful, so no sampling strategy or retry policy rescues them.
The cost side deserves the same rigor. Each of those pages is large — the useful signal sits near the end, so no bounded read helps — and every one buys nothing. Establishing that a class of work has a known cost and a provably empty payoff is worth as much as finding a fix, because it removes an option that would otherwise keep getting proposed.
Skip It, and Record That You Skipped It
The right handling is to stamp such rows as checked without fetching them. That sounds like a small optimization and it is really a correctness measure: without the stamp, every round rediscovers the same rows as un-enriched and spends its budget on them forever. A negative cache is what turns "we know this will not help" from a comment into behavior.
The same applies to genuine failures. A page that was probed and had no preview tag should also be stamped, so the budget moves on. The distinction between a row that has never been tried and one that has been tried and yielded nothing is exactly what a bounded budget needs in order to make progress.
Where the Pictures Actually Come From
Two lanes end up doing the real work, and neither is the one everybody proposed. Feeds that come directly from a publisher usually carry an image in the feed entry itself — free, no extra request. And for a wrapper, the only way to a real picture is to resolve it to the underlying article first, which is a different and more expensive operation, worth spending only on rows a person is about to look at. That is the next two lessons.