The best solution IMO is actually to reduce the total number of shields in the game and fix armor so it works properly and is worth having.
there are 2 things that could help defend against ranged damage, one is shield and another is armor.
Personally i think shield are acceptable they way they are. realistically they cannot tank that many arrows so maybe nerf their durability against ranged so it breaks after enough shots instead of being able to hold a wall of arrows on it.
What is Not acceptable is how weak shield troops are, even assuming they hold shield wall and close in on the archers, their melee ability in close quarters won't allow them to completely slaughter the archers. the only people shield troops can beat in melee are weaker shield troops. they get slaughtered by 2h troops as well.
I'm not even talking about Fian champs and Khans guards that are ranged troops with 2h weapons capable of wrecking in both categories.
I think everyone is fine with some kind of unit type countering in a rock paper scissors fashion. the question is how to implement it. and right now there are just troop types that are op and troop types that are useless in terms of their effectiveness in combat based on current observations of their countering interactions.
Here's a few suggestions that might improve the situation:
Spearmen - allow them to attack normally during shield wall so they are more than a cattle prod for the horses.
Swordsmen - better close quarter capabilities
2 handers - hard code preference to stand behind shields instead of charge at front
Archers - Nerf accuracy at farther distances, but allow firing mode commands to compensate: focus area, volley or fire at will (fastest rate of fire)
- Allow ranged damage to drop off more at range. war arrows with armor piercing tips were heavier and travelled less distance with a greater energy drop off rate
- Introduce "Glancing hits", non lethal areas take reduced ranged damage such as limbs, shoulders, tip of your helm etc.
Cavalry - increase tremple damage. increase knock down time, reduce likelihood of horse rearing up based on troop tier and damage intake. (think elite cataphracts vs peasant poop fork)
- reduce requirement for couch lance so they happen more often
Horse Archers - hard code preference to stay at range when they still have ammo (instead of charge into mob of enemy footmen)