diff --git a/menu_token.module b/menu_token.module
index ed413e5..586d007 100644
--- a/menu_token.module
+++ b/menu_token.module
@@ -190,6 +190,23 @@ function menu_token_form_menu_link_content_form_alter(&$form, FormStateInterface
     '#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;
   }
 }
@@ -404,13 +440,33 @@ function menu_token_prepare_context_replacement(&$links) {
   $bubbleable_metadata = new BubbleableMetadata();
 
   foreach ($links as $key => $linkData) {
-    try {
-      $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;
+    $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;
+        }
+      }
     }
-    catch (Exception $exception) {}
-
     $links[$key] = $links[$key]["link"];
   }
 
