diff --git a/menu_token.module b/menu_token.module
index e23fa58..6c49720 100644
--- a/menu_token.module
+++ b/menu_token.module
@@ -190,6 +190,23 @@ function menu_token_form_menu_link_content_menu_link_content_form_alter(&$form,
     '#default_value' => $config_array['remove_if_replacement_is_not_present'],
   ];
 
+  $form['menu_token_options']['add_query_parameters'] = [
+    '#type' => 'checkbox',
+    '#title' => t('Add query params'),
+    '#description' => t('If the replacement tokens to be used as query parameters.'),
+    '#default_value' => isset($config_array['add_query_parameters']) ? $config_array['add_query_parameters'] : FALSE
+  ];
+  $form['menu_token_options']['query_parameters'] = [
+    '#title' => t('Query Parameters'),
+    '#type' => 'textfield',
+    '#default_value' => isset($config_array['query_parameters']) ? $config_array['query_parameters'] : '',
+    '#description' => t('Add your query parameters, don\'t include "?". Example <em>foo=bar&foo2=bar2</em> is valid.'),
+    '#states' => [
+      'visible' => [':input[name="add_query_parameters"]' => ['checked' => TRUE]]
+    ],
+    '#field_prefix' => '?'
+  ];
+
   // Submit handler.
   $form['actions']['submit']['#submit'][] = 'menu_token_form_submit';
 }
@@ -227,6 +244,8 @@ function menu_token_form_submit($form, &$form_state) {
   $config_array = [
     "menu_token_enabled" => $values['menu_token_enabled'],
     "remove_if_replacement_is_not_present" => $values['remove_if_replacement_is_not_present'],
+    "add_query_parameters" => $values['add_query_parameters'],
+    "query_parameters" => $values['query_parameters']
   ];
 
   $available_entities_configuration = \Drupal::config('menu_token.availableentitiesconfiguration');
@@ -391,6 +410,23 @@ function replace_links_with_tokens(Token $token_service, $replace_with, $relevan
     if (is_null($links[$relevant_link['id']][$replace_with])) {
       $links[$relevant_link['id']][$replace_with] = $token_service->replace($config_menu->linkid, [], ["configuration" => $configuration], $bubbleableMetadata);
     }
+
+    if ($replace_with == 'url' && (isset($configuration['add_query_parameters']) && $configuration['add_query_parameters'])) {
+      $query_string = $token_service->replace($configuration['query_parameters'], [], ["configuration" => $configuration], $bubbleableMetadata);
+      if(!empty($query_string)){
+        $query_params = [];
+        foreach(explode('&', $query_string) as $query_item){
+          if(empty($query_item)){
+            continue;
+          }
+          list($key, $value) = explode('=', $query_item);
+          $query_params[$key] = $value;
+        }
+      }
+      if(!empty($query_params)){
+        $links[$relevant_link['id']]['options']['query'] = $query_params;
+      }
+    }
     $links[$relevant_link['id']]["options"]["bubleble_metadata"] = $bubbleableMetadata;
   }
 }
@@ -407,6 +443,30 @@ function menu_token_prepare_context_replacement(&$links) {
     $links[$key]["link"]["url"] = $token_service->replace($linkData["link"]["url"], [], ["configuration" => $linkData["config"]], $bubbleable_metadata);
     $links[$key]["link"]["title"] = $token_service->replace($linkData["link"]["title"], [], ["configuration" => $linkData["config"]], $bubbleable_metadata);
     $links[$key]["link"]["options"]["bubleble_metadata"] = $bubbleable_metadata;
+    if(isset($linkData['config']['add_query_parameters']) && $linkData['config']['add_query_parameters']){
+      $query_string = $token_service->replace($linkData['config']['query_parameters'], [], ["configuration" => $linkData["config"]], $bubbleable_metadata);
+      $query_params = [];
+      if(!empty($query_string)){
+        foreach(explode("&", $query_string) as $query_item){
+          if(empty($query_item)){
+            continue;
+          }
+          list($query_key, $query_value) = explode('=', $query_item);
+          $query_params[$query_key] = $query_value;
+        }
+      }
+      if(!empty($query_params)){
+        $links[$key]["link"]["options"]["query"] = $query_params;
+
+        // entity.node.canonical URLs seems to ignore query parameters
+        if($links[$key]["link"]['route_name'] == 'entity.node.canonical'){
+          $url = Url::fromRoute('entity.node.canonical', $links[$key]["link"]['route_parameters'], []);
+          $url = $url->toString();
+          $links[$key]["link"]["url"] = "base:" . $url;
+          $links[$key]["link"]['route_name'] = NULL;
+        }
+      }
+    }
     $links[$key] = $links[$key]["link"];
   }
 
diff --git a/src/Service/MenuTokenContextManager.php b/src/Service/MenuTokenContextManager.php
index f196a90..29947c3 100644
--- a/src/Service/MenuTokenContextManager.php
+++ b/src/Service/MenuTokenContextManager.php
@@ -64,6 +64,9 @@ class MenuTokenContextManager {
     $text_tokens = $this->tokenService->scan($relevantLink["url"]);
     $text_tokens = array_merge($text_tokens, $this->tokenService->scan($relevantLink["title"]));
 
+    if($config['add_query_parameters']){
+      $text_tokens = array_merge($text_tokens, $this->tokenService->scan($config["query_parameters"]));
+    }
     $use_in_context = FALSE;
     foreach ($text_tokens as $token_type => $tokens) {
       $entity_type = $this->tokenEntityMapper->getEntityTypeForTokenType($token_type);
