Along with general procrastination and writer's block I also suffer from the closely related coder's block. I address this the same way: instead of free-writing I start "free-coding", where I write code with the intention that it's going to be crap, and I might even start writing gibberish, before I move on to writing code that compiles and maybe runs, but does nothing useful. The goal is just to get started.
In the case of both free writing and free coding, once I start I pretty quickly move on to writing stuff that's decent even if it's not great. That's something I can work with, and once I get in that mode I have much greater resistance to distractions.
To circle back to procrastination, I might use a similar approach. Say I need to clean up my work area, and I just don't want to (even though I also do want to). I need to reduce the scope of the problem to something absurdly simple, or maybe even just absurd. So I decide I'm just going to move all the loose items on my desk to another table so I can dust the desk. But I'm not even going to dust the desk, I'm just going to move the stuff off of it. For the immediate moment that's all I've got to care about it. Just moving stuff around.
But once the desk is cleared, dusting it and wiping it down is easy. It's so easy in that moment that that's all I care about. Then once that's done, I move the stuff back. But as I'm moving the stuff back it's easy to address each item one-by-one. Old papers can go in the trash or recycling, the books can go back to their regular place on the book shelf, the stapler can go back in the desk drawer where it regularly resides, etc. Then I realize now would be a good time to wipe the dust off my monitor, sort through the nearby stack of mail, etc.
Now mind you, I still procrastinate way more than I should, but these techniques work for me and I procrastinate a lot less than I used to.