I think you can start by checking out your competition. What words do they use and what seems to be the things that people type in their searches that make them land into your competitor places. Observing how people getting better results that you go about it can bring some insight, but don't just mimic try to see where they come from with them.
A simple rule of thumb is that keywords are not just the tags in the meta side of your code but anything you use in your webs, your article titles and content, so you might find useful to broaden your terms in order to cover more vocabulary related to your topic. Titles / Headers are a pretty good spot where you can try wording using the common terms people use or even have the query as the title itself so the SE might pick straight away that people searching for that doubt, will benefit with your answer.
So say you have a website about dogs, go to yahoo answers and see what people ask about dogs, go to official pets pages and see what terms they use. If you can, learn synonyms and intercalate them in the article without making it sound forced. For example, I'd make sure to use the word canine, mention different breeds, making articles about the care of dogs, and of course, I would try to find other dog websites to see what am I standing against and where I might be coming short, furthermore, where are those sites coming short and how can I provide what they are lacking. All this will help you find keywords to keep enriching your web. I hope this can be of help.