What actually resulted in this finally happening was not the change in the browsers, in fact the browser changes were permitted by the reality that there aren't certificates without SANs any more. Though I agree the browser change does prevent backsliding. Nor was it the change in the Baseline Requirements which spell out that CAs must use SANs.
No, what mattered was Certificate Transparency. Especially mandatory CT, but even just voluntary compliance by CAs eager to show willing before that.
The problem we've most consistently had with CAs isn't that they're deliberately breaking the rules, but that they're incompetent. Which makes sense, humans aren't mostly bad but they are mostly incompetent. So they might intend to comply, but they screw up.
CT allows independent researchers to check stuff. For example after certificates for "private names" (e.g. "hplaserjet" or "myrouter.home") were banned, there was a period when CAs mustn't issue more but had time to revoke any that still existed. After that time limit expired I ran a script to pull out any certificates from CT which (in the script's opinion) seemed to be for private names, yet (again in its opinion) had not been revoked. There shouldn't have been any. But of course there were and the CAs had to clean up their mess.
This allowed us to really clean up several problems with certificates, where a practice was banned, everybody agreed it was banned, but it kept happening anyway. Today if you issue a certificate that shouldn't exist (as we saw recently with that 1024-bit RSA certificate) it's likely to get noticed fairly quickly and you'll have to explain yourself.