This is, in all seriousness, my recommendation for learning to touch type:
Step 1: Switch your layout to Dvorak (or any other sensible layout).
Step 2: Learn to use it.
There's no step 3. Touch typing is only hard because QWERTY is a terrible and stupid layout that encourages you to wander from the home row because too many common keys aren't on the home row.
If you solve that problem directly, there's no "learn to 'actually' touch type" step. In any sensible layout (of which Dvorak is merely one of many, really), you don't have to force yourself to touch type... it's just what your fingers will do on their own.
If your goal is to learn to type correctly, based on what I see of people fighting for years, I seriously think that "Learn Dvorak" is a faster, more effective way to get there than "Learn QWERTY + spend the rest of your life trying to force your brain to do something it quite rationally does not believe is optimal".
People can get emotional about this, so bear in mind whether or not QWERTY is the only "practical" layout to learn because it's the only pervasive one is separate from the question of whether it encourages your hands to wander from the home row. (Which is all-but-proved by the very fact we're having this discussion.)
I am also extremely aware of the expense of learning Dvorak or another layout, having done it myself. I still say it's easier that trying to force QWERTY touch typing, if you want to learn to touch type at all. If you're happy with wandering QWERTY syndrome... and I really have no great arguments about why that's bad... then carry on.
In practice, the combined strategy of Dvorak+QWERTY command keys, application-specific layout settings, and a rarely-used keybind to swap manually makes this manageable on a day-to-day basis, but it's definitely not ideal. Blame the dumb legacy technology driving keyboards, if you're mad.
The thing that keeps me from switching is I learned to touch type long before having access to keyboards that could be reconfigured.
While that may be less common now, I suspect lots of people still become proficient keyboarders long before learning how to change keyboard layouts, and at that point switching is a cost rather than a benefit.
I prefer Emacs to Vim though, perhaps that's less affected since shortcut keys are influenced by meaning rather than position? (e.g., Ctrl+N, P, F, B for moving nextline, previousline, forward, backward).
Actually, I guess most of the keystrokes are placed by meaning, not position.
Switching back to qwerty in vim is pretty rough for me though. Enough of the mnemonics that I use on a regular basis get translated to muscle memory in my head that it's tough. I used to be able to switch back and forth easily when I was at a job that had me on qwerty keyboards regularly. But now that I'm not I've lost a lot of it.
Side note: After typing exclusively on dvorak for ~10 years now I actually think that it's not the best layout to maximize potential typing speed. (I've never gotten as fast with dvorak as I used to be with qwerty.) Dvorak focuses too much on single key locations and alternating hands. I think to get the maximum speed a layout needs to focus a lot more on runs, making sure the most common n-grams are typeable with out-to-in or in-to-out runs of adjacent fingers in the same hand. I've thought about working on this, but quite a bit of work would be needed to develop a new and more accurate cost model and find a layout that optimizes it--I've got too many other competing interests. But I'd love to see it done.
I learned Colemak earlier this year. After I reached my old qwerty speed I re-learned how to type in Qwerty. As such I can now type in both layouts at my original speed. Typing in qwerty is really not bad; good enough that I don't really recommend others to change layouts or learn another one. I am also convinced an opinion stating that qwerty is terrible coming from someone who still can't type in it well and naturally is somewhat biased.
A property plenty easy to achieve on any keyboard layout, with a little ingenuity (and possibly a butter knife).
TLDR: build frequent wordlists and lists of n-grams for practicing. Here's mine with lists for English, Unix Commands, and PHP code: https://github.com/gibrown/learn-colemak
This site teaches the letters "eaint" first. I think it's better to introduce the home row first. Don't worry that you can't type much English with the home row (unless you're using another layout like dvorak). Just get them good with different combinations of "asdfjkl;". Then once you have that, you introduce new keys by having them practice the jump from the correct home row key typed with the same finger to the new key and back. Let's say we're introducing 'e' next. The exercise would be something like this:
ded ede dde eed eded dede deeded edded ...
This gets them familiar with precisely the right motor recruitment pattern. The point of this exercise isn't to achieve the absolute maximum speed. It is to exercise the movement pattern of moving a certain finger from the home row to the key and back. Obviously you need to make sure they're keeping their hands on the home row and not typing d and e with two different fingers to go faster on this particular exercise. But that shouldn't be hard to do in your instructions. You can start to dissuade this in your next exercises by bringing in the home row letters typed with the adjacent fingers.
fesd sefd sdfesd fdsefd ...
I think this kind of exercise pattern should be used to introduce all the keys. Once the student has established these motor patterns in the process of learning where each key is, then you can go on to English text. Of course you can put English into these exercises when possible, but not to the detriment of the main point which is motor movement patterns.
If you already know how to touch-type and are learning a new keyboard layout, then obviously you already know the motor recruitment patterns and the approach used by this web app is great.