This is indeed a hard problem because some actually do not care at all, but others like me can get stuck in insane traffic.
However i think charging a fine for not showing up would in my view a good idea, and i think those having a traffic issue should call when they think they would arrive more than 5 to 10 minutes later after the appointment.
It worked for me and most people who allways appear at will, changed their behaviour by either call before they do not show up or actually do show up.
In my work i entered the same rules 20 euro for showing up late (over 10 minutes late) and not call before entering or giving a good excuse.
Some seem to not care at all and i charge them a full consult after 3 times not showing up or not letting me know or giving a good excuse.
When they disappear as customer i kinda not care anymore, they simply refuse to cooperate and thats not what you want.