Template matching works well for some cases, with some caveats:
1) you will probably need to pre-whiten your image before it will work successfully.
2) your FFTs and IFFT should be of an appropriate length to avoid aliasing due to the circular convolution involved.
See this example of item 1:
The patch we are trying to find is the singer's nose. This is a toy example, because I've used the exact pixels from the image (rather than a "template"), but it illustrates the issue.
The bottom left image shows what happens when you use template matching (as you've described in the question) without doing any processing. The problem is that there is no localization at all: it's very hard to discern the true "peak" in the surface that is generated.
The bottom right image shows what happens when the same operation occurs, but a (stupidly simple) pre-whitening of applying the
diff operation to both the image being searched and the template. It's a little hard to see because the peak is so small and large, but there is a red peak in the correct place.
This image shows the "side view" of the bottom two images.