Keyword Combinator

This free SEO tool from Dotwise takes two lists of keywords and produces the set of combinations. This is also known as the Cartesian product of two sets. 

If you are producing keyword lists for PPC you can also specify a Match Type that equates to the match types used by Google Ads. 

System.InvalidOperationException: Could not find the view ~/Views/MacroPartials/KeywordCombinator.cshtml, the following locations were searched: 
~/Views/MacroPartials/KeywordCombinator.cshtml
   at Umbraco.Web.Mvc.ControllerExtensions.EnsureViewObjectDataOnResult(ControllerBase controller, ViewResultBase result) in D:\a\1\s\src\Umbraco.Web\Mvc\ControllerExtensions.cs:line 187
   at Umbraco.Web.Mvc.ControllerExtensions.RenderViewResultAsString(ControllerBase controller, ViewResultBase viewResult) in D:\a\1\s\src\Umbraco.Web\Mvc\ControllerExtensions.cs:line 76
   at Umbraco.Web.Macros.PartialViewMacroEngine.Execute(MacroModel macro, IPublishedContent content) in D:\a\1\s\src\Umbraco.Web\Macros\PartialViewMacroEngine.cs:line 98
   at Umbraco.Web.Macros.MacroRenderer.<>c__DisplayClass17_0.<ExecuteMacroOfType>b__0() in D:\a\1\s\src\Umbraco.Web\Macros\MacroRenderer.cs:line 335
   at Umbraco.Web.Macros.MacroRenderer.ExecuteProfileMacroWithErrorWrapper(MacroModel macro, String msgIn, Func`1 getMacroContent, Func`1 msgErr) in D:\a\1\s\src\Umbraco.Web\Macros\MacroRenderer.cs:line 306
   at Umbraco.Web.Macros.MacroRenderer.ExecuteMacroWithErrorWrapper(MacroModel macro, String msgIn, String msgOut, Func`1 getMacroContent, Func`1 msgErr) in D:\a\1\s\src\Umbraco.Web\Macros\MacroRenderer.cs:line 265
   at Umbraco.Web.Macros.MacroRenderer.ExecuteMacroOfType(MacroModel model, IPublishedContent content) in D:\a\1\s\src\Umbraco.Web\Macros\MacroRenderer.cs:line 332
   at Umbraco.Web.Macros.MacroRenderer.Render(MacroModel macro, IPublishedContent content, IDictionary pageElements) in D:\a\1\s\src\Umbraco.Web\Macros\MacroRenderer.cs:line 238
   at Umbraco.Web.Macros.MacroRenderer.Render(String macroAlias, IPublishedContent content, IDictionary`2 macroParams) in D:\a\1\s\src\Umbraco.Web\Macros\MacroRenderer.cs:line 209
   at Umbraco.Web.UmbracoComponentRenderer.RenderMacro(IPublishedContent content, String alias, IDictionary`2 parameters) in D:\a\1\s\src\Umbraco.Web\UmbracoComponentRenderer.cs:line 122
   at Umbraco.Web.UmbracoComponentRenderer.RenderMacro(Int32 contentId, String alias, IDictionary`2 parameters) in D:\a\1\s\src\Umbraco.Web\UmbracoComponentRenderer.cs:line 102
   at Umbraco.Web.UmbracoHelper.RenderMacro(String alias, IDictionary`2 parameters) in D:\a\1\s\src\Umbraco.Web\UmbracoHelper.cs:line 171
   at ASP._Page_Views_Partials_grid_editors_Macro_cshtml.Execute() in W:\InetPub\wwwroot\DotwiseUmbraco\DotwiseUmbraco2\Views\Partials\grid\editors\Macro.cshtml:line 15
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at Umbraco.Web.Mvc.ProfilingView.Render(ViewContext viewContext, TextWriter writer) in D:\a\1\s\src\Umbraco.Web\Mvc\ProfilingView.cs:line 25
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model)
   at ASP._Page_Views_Partials_grid_editors_Base_cshtml.Execute() in W:\InetPub\wwwroot\DotwiseUmbraco\DotwiseUmbraco2\Views\Partials\grid\editors\Base.cshtml:line 20
Member of Kingston Chamber of Commerce
Winner, Kingston Business Excellence Awards 2018, Customer Service category
Finalist, Kingston Business Excellence Awards 2019