In my experience the most important thing is to document what you are going to do in detail and make sure the client understands.
Produce mockups of the finished site and any backend admin interfaces. Specify what functionality the site has and be clear about any functionality that is being omitted.
For example, if you develop a CMS that requires the user to process story images offline in an editor like Photoshop, then make sure the cleint understands. If you don't many clueless clients will assume that the CMS will handle it for them and get upset whent they learn otherwise. If you don't adequately document the deliverables the client will most likely demand changes during the development process.
Keep contracts simple, specify what you are going to deliver and when and also touch on rights and who will own the resulting IP on the site/code. Do insert something to say that the client cannot withold payment if you are late becuase of something you need from the client. E.g. the code is complete and you need images from the client to let the site go live and they will not supply them. This can be done without scary legalese. The law provides a certain amount of legal protection that you do not need to repeat in a contract. You do not need to mention that you will sue your client if they don't pay, you have that legal right to begin with.
Accept that you will be learning as you go along. You will encounter bad clients, but you will learn from that and know what sort of clients to avoid in future.
Also, be very careful about tax! Be honest and keep money aside to pay it when due.