Each DM has their own take on how to successfully run travel in D&D. It's approached so differently that this is definitely not the first blog post about it. One of the reasons for that is because, as The Angry GM put it, long scale travel can either be quickly "magic wand"-ed away, or it becomes a series of random encounter checks, usually 1 per day. The random encounters themselves aren't an issue - the issue is that having one per day often removes any sense of true danger, as used spell slots and low health never factor into the danger of the day.
In a recent session of Battle for Ercellonia, the homebrew campaign I've been running for a couple years now, I changed up how we've approached overland travel. I think overland travel is a good way to have "practice" encounters to try out spells, learn combat techniques with the rest of the party, but most importantly, it gives narrative time for role play. When delving into a dungeon, there often isn't a ton of time where a player can sit down and chat about where they came from, or why they've found themselves in the bottom floor of the Iron Tower in the City of Dis.
A few months ago, I came across this Reddit post from /u/BrittleCoyote, in which they describe this idea of a Journey Pool. To recap, the general sense is you start out with 3d6s. This represents your initial pool. Actions that would cause the party to be delayed (totally up to the DM's discretion), add 1 to that pool. At the end of each day of travel, roll those dice and for every 1 rolled, add one to the consequence counter. These consequences take the shape of the impact that the party's delay had on the situation. The example given in the Reddit post referenced the party trying to get to a city before it was besieged by an invading army. The consequences would then be reflected in the state of the city's defenses when the party arrives.
For the travel rules within our campaign, I've modified things just slightly. For each combat encounter that lasts more than 3 round, or other setback that would delay the party for an extended amount of time, add a die to the pool. Some days will have the possibility for combat, others will not. Each day, if traveling at a normal pace, roll 1d20 on a random encounter table written specifically for the environment the party is traveling through. If traveling at a fast pace, roll 2d20 on the encounters table. If traveling at a slow pace, add a die to the Journey Pool and select a non-combat oriented encounter from the table. At the end of the day, roll the Journey Pool. For each 1 that is rolled out of this pool, the party suffers a consequence, listed in a table of consequences, again, specific to the journey the party is currently on.
As far as the encounter tables are concerned, I've used a variety of resources, such as this list, this list, this list and more. In addition to that, I've come up with some of my own that blend in characters the party has previously met, or people that might have information that would be pertinent to the party's current situation. For the current travel that our party has embarked on, the encounter table is roughly 75% non-combat-likely scenarios. Within that, I have encounters that include skill checks, social encounters, and even some spots where some new items can be found. The other 25% are environment and difficulty specific combat encounters, each with a potential to be avoided or ignored.
With a few sessions under our belt with this system, it seems to work pretty well, but like nearly everything in D&D, it's definitely dependent on your party and the type of game you're looking to run.
Got any questions about these travel rules? Any suggestions/critiques on how to improve them? Let me know in the comments below, or on Twitter @tylerconlee