So frustrating! This is most definitely a constant complaint! There are threads dedicated to discussing this topic. If you search for them in the forums, you'll find lots of suggestions.
We have it in our house rules:
* BE ON TIME: We'll expect you to work with us to find a mutually acceptable check-in time and commit to arriving at the agreed upon time.
We mark down every guest for "House Rules" if they are late. One day, we're going to have to send someone away for violating this - because we're out or unavailable when they show up.
Mostly, we get guests who want to give us a range of time. To this we respond:
"We have busy lives. Since it's our home, we would like to commit to an arrival time with you. We both have commitments and jobs that often force us to be away from the house. There is no full-time staff, it's just us, so we need to make sure one of us is available to greet you, let you in, and show you around. There is no remote key or keybox and we'd hate to leave you stranded on the porch wanting to check in while we're off running errands. We hope you understand. We'd be happy to put you down for a xxpm check in if that works for you. Then we can set about planning our day around your arrival."
Note, that Airbnb has sided against a host who had a range of time 2-10, but the guest said they'd be there at 3. He waited until 6 and went home. The guest arrived at 8. He said he couldn't get back until 9. She was able to get rehoused and he got dinged for a Host Cancel. They said since he had a "range" he had to be there for the entire time.