The use of --no-ff on merge is how GitLab and GitHub do their merges for pull requests / merge requests. This gives you a single commit sha that can be reverted to revert a PR/MR. See: https://git-scm.com/blog/2010/03/02/undoing-merges.html (the last paragraph also points out using --no-ff)
Essentially, best practice is to use them when merging feature branches, merge requests, pull requests. When merging codelines, say merging master into a release line, or pulling a patch line back down into master, you would probably not bother with --no-ff and let it be fast-forward if it can.