Empty-field-rate monitoring catches selectors that return nothing. It does not catch selectors that return something wrong. The most damaging form of schema drift is the kind where a selector keeps producing values, the values are syntactically reasonable, and they are no longer the values you wanted. A price selector that quietly starts returning the financing instalment instead of the sticker price will pass every non-empty check while corrupting your data for as long as the drift goes unnoticed. That is the failure mode this post is about.
Drift comes in several flavours
People talk about "schema drift" as if it were one thing, but in scraping practice there are several kinds of drift, each of which fails differently and demands a different defence.
Drift type Meaning Example
DOM/layout drift The page structure changes Product cards move from table rows to grid cards
Data contract drift The meaning or format of a field changes Price changes from numeric text to "Contact us"
Navigation drift…