I have endured the same for some time now, stripped the starter motor down and the solenoid piston was rusted.
If the piston doesn't move far enough, then it won't 1.) engage gear with flywheel, and 2.) create contact to allow the motor to spin.
Cleaned up the piston and inside the solenoid housing with some wire wool, used a bit of copper grease (anti sieze) on the piston and reassembled.
Worth checking the rest of the starter over at the same time.
Jobs a goodun, no probs since.
If you're willing and confident to strip it down you'll need an impact driver to get the three screws holding the solenoid out as they will have corroded, spray plenty of releasing agent on them first.
I'm going to do the same on my other starter and keep as a spare.