There isn't much unique textual content between those two pages. They have the same title and the same heading. There are only two sentences on the pages which are the same between them. The biggest difference between the pages is the images shown below the fold. You are lucky that Google has decided to index both pages. Most of the time Google chooses not to index one of the two pages when it finds pages that are so similar.
To get the pages to each rank for different search terms you need to differentiate the pages.
- Change the title tags to be more specific. Rather than just "Product x templates" they should be:
- "Product x service templates"
- "Product x events templates"
- Change the text above the fold to differentiate. Use the category keyword in one of the two sentences. But maybe not both to avoid keyword stuffing.
- Ideally show more text about each template. Just showing two or three text words below an image doesn't give Google much text to work with. This is the hardest of my suggestions to implement and should be the lowest priority. Just implementing the first two will probably be sufficient.
The bottom line is that when you create filtered list pages that you want to work with SEO, you have to go the extra mile and differentiate the pages more than just the list of items.
You also have an SEO issue with combinations of parameters. There are so many possible combinations of parameters that Googlebot could easily get bogged down. There is no sense in having Googlebot crawl and index a page with two or more filters applied like:
?category=service&menu_type=burger&components=portfolio. You should take steps to ensure that Googlebot doesn't find and index pages with multiple parameters.
Don't have links on your site with more than one filter applied.
noindex tags in pages with more than one filter item specified.
robots.txt to prevent crawling of pages with multiple parameters by using a rule like: