As a lot of people already suggested, try to automatically collect as much data as possible. But of course, that is usually not enough. For the data that has to come from the user, just make the form as specific as possible. So, for example, this is useless:
Please provide a description of the bug: ____________________________
A user who has never submitted a bug report would have no idea what to enter into a form like that. This is better, but still not nearly good enough:
Please describe what you were doing when this happened: __________________________________
You would probably get an answer like "I was trying to create a photo album." instead of step-by-step instructions to reproduce. Try something like this:
Please describe, step-by-step, what you were doing when this happened:
1. Start at this URL: ______________________
2. Click on _________________________
3. ___________________________
4. ___________________________
5. ___________________________
Describe in a few words what you expected to happen after the last step: ______________________
Describe in a few words what happened instead of the expected action: _______________________
Were you logged in at the time the problem occurred? [ ] Yes [ ] No
If yes, please specify your user name (optional): ________
...etc. Try to think of any relevant information that you're not able to collect automatically.
Your users will probably forgive you even if the form is long, if you don't make them think too much. Depending on how clever your users are, you might want to add some kind of motivational text (e.g. "the more information you provide, the better chance that we will be able to reproduce and fix the bug"), but there's a good chance that a user who submits a bug report already knows why they are doing it, so it would just feel patronizing.