Stop booting from the card. A Pi 4 with an updated bootloader EEPROM boots straight off USB, and a 120GB SATA SSD in a cheap USB3 enclosure costs about what two more decent cards cost. That one change ends this for almost everyone running an always-on service.
If you want to keep the card for now, do two things. Move logging to RAM (log2ram, or just point rsyslog at a tmpfs) and turn Pi-hole's query logging down or off. A DNS sinkhole writes constantly, and consumer cards have tiny controllers doing very little wear levelling once the partition is mostly full.
Also run vcgencmd get_throttled next time it goes read-only. If that comes back as anything other than throttled=0x0, the card is a victim rather than the cause.