Put a DC voltmeter across from a good ground to the terminal where the hot cable enters the starter and have someone crank the engine over with the starter. If you get less than 11v (preferably higher) you could have a problem in the supply, almost certainly a dirty or corroded terminal somewhere upstream. Remove the ground connection at the battery for safety, then clean the following with 100 grit paper and brass wire brush: the terminals and cable lugs at the starter, solenoid (both in from battery and out to starter) and both battery terminals and posts. Smear a thin coating of dielectric grease on all before reassembling.
Replace the battery terminals in this order: Hot first, then Ground. Obviously, keep clear of moving parts in the test.
If you do the test first by using the starter casing as your ground, and get an OK voltage, then by grounding to the car frame and get a low one, the problem is probably in the grounding strap(s), either broken, frayed or with corroded terminals. The return current is finding a different path than the intended ground.