We only have so many canned, built in, close reasons. There are so many other reasons to close something at times - giving a better message than trying to shoehorn the reason to close something into too broad or primarily opinion.
Custom close messages have the significant advantage when it comes to trying to get a good answer in that they also leave a comment that (ideally) would help the person asking (or attempting to fix) the question understand what needs to be done before the question is closed and make it suitable (or delete it if its really off topic and would ultimately garner down votes).
Short and abrupt close messages may be off-putting to some and don't help as much when it comes to getting people to write good questions. The tricks to writing good messages is a combination of having them at the ready and knowing the quick little 'magic links' that can be used to link to the right spot.
Close reasons use the comment markdown, which gives a bunch of additional magic links. MSO details them in balpha's answer, thought the short version most applicable to close reasons:
- [meta] => a link to meta.programmers.stackexchange
- [help] => a link to the help section
- [help/on-topic] is a link to https://softwareengineering.stackexchange.com/help/on-topic and rendered as "help center"
- [help/dont-ask] is a link to https://softwareengineering.stackexchange.com/help/dont-ask and rendered as "help center"
- [ask] => link to the "How to Ask"
- [chat] => link to the chat page
- [about] => link to about page https://softwareengineering.stackexchange.com/about
-  => link to edit the page itself.
Using these quick links will make it easier to fit more into a canned (or not) message without actually using more text.
Additionally, its a better experience for all involved to not migrate questions that will get closed in some way other than a duplicate on the target site. A fine line should be considered when suggesting to repost a question on another site without having it closed/deleted on the first one. Be sure that the question is on topic at the target site. If in doubt, don't suggest reposting but instead flag for a moderator to migrate the question.
I have also found the following links to be helpful to reference when writing close messages (not everyone knows where they are).
[Stack Overflow question checklist](https://meta.stackexchange.com/questions/156810/)=> Stack Overflow question checklist - a compressive list of things to check before posting a question to Stack Overflow.
[Let’s Play The Guessing Game](http://blog.stackoverflow.com/2012/02/lets-play-the-guessing-game)=> Let’s Play The Guessing Game - a Jeff Atwood blog post from Feb 2012 about the awkward nature of trying to name something
[Q&A is Hard, Let’s Go Shopping!](http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/)=> Q&A is Hard, Let’s Go Shopping! - a Jeff Atwood blog post from November 2010 about questions asking for a shopping list.
[What can I do when getting “We are no longer accepting questions/answers from this account”?](https://meta.stackexchange.com/questions/86997/)=> What can I do when getting “We are no longer accepting questions/answers from this account”? - the question ban MSE reference. Likely not that useful in a close reason (you'd need to be a mod on SO to check if a user is question banned prior to a migration - however, when a migration fails because of a question ban on the target site, this is a useful link to have so its included here).
I've often found myself going to a meta question to pull up a pre-written close message and then copying and pasting that into the question. Just go in, edit the question to grab the source and copy and paste it into the close reason.
Hopefully, this will help people looking for the right wording for closing a question.