I have two ideas that Roll20 can handle:
A labeled grid that allows you to easily send chat messages in a low voice to players
If the grid is labeled in a similar way to a chessboard, you can easily indicate areas, squared, where players observe something different from what the map itself shows.
If there is an illusory swamp, you can put it on the map layer so that everyone can see it. Then if a player with True moves in a range that allows them to perceive the illusion, you can directly whisper this information to them
/ w TrudyTheTrueSeer Moving forward, your Truesight reveals that the swampy terrain in squares (36, 47) to (38, 49) is an illusion.
The labeled rows and columns correspond well to the design of the square mosaic map, and it is very quick and easy for you and your players to refer to the same specific areas as needed. It also allows players to easily draw their own card or take notes to keep track of information, as it is difficult to show different cards to multiple players when they are in the same place.
A community map with individual legends
It is essentially a battlemat approach directly carried in Roll20.
The basic idea is that you distinguish the elements of the map in a way that can only be decoded using a legend, and then give each player a legend that reflects their perception. This will work better with less detailed map elements (like colored boxes, lines, or simple drawings) than with tokens, but could also be applied to some tokens.
If we have an area that is normal terrain but has been subject to Arcane Mirage to look like dense and thorny vines, the area can be represented simply by a green rectangle indicating the dimensions of the area, or a copy-paste mass of a simple drawing of a thorny vine (or something else , as long as it is separate from other elements on the map). This is the common card that all players see.
But the map legends that explain the map are distributed to each player individually. Players with True Seeing will find the entry for the green lines (or this drawing in this color) as illusory terrain, while the rest will find the entry describes the dense and thorny vines ostensible as they appear to the vision mundane.
This approach requires a lot of planning as you need to make sure that the symbols and colors are distinctive enough to stand out from the crowd at a glance without being obviously noticeable. For example, if there are real vines as well as illusory vines on the map, it transmits metadata to players if the real ones are green and the illusory purple ones – it is clear that they are different in some way, unless each color is just as plausible.
This approach can also give information on the whole map at once. If a player identifies purple vines as illusions, then all the purple vines on the map will likely be illusions. You can tone this down with more randomly assigned colors (green, red and blue vines are real, but purple, black and yellow vines are illusions), but it will likely warn players that there are varieties of terrain feature that matters.
In any case, this approach slightly eases the burden of storytelling for you. You can always describe things as what they look like, and players can refer to their own private knowledge to interpret them correctly.