diff --git a/js/ckeditor5_plugins/linkit/src/index.js b/js/ckeditor5_plugins/linkit/src/index.js
index 3ef7be0..fd6b536 100644
--- a/js/ckeditor5_plugins/linkit/src/index.js
+++ b/js/ckeditor5_plugins/linkit/src/index.js
@@ -33,20 +33,34 @@ class Linkit extends Plugin {
       },
     });
 
+    let selected;
+    let existingUrl;
+
+    // Stop link processing if url did not change.
+    const linkCommand = editor.commands.get('link');
+    linkCommand.on('execute', (evt, args) => {
+      if (this.existingUrl == args[0]) {
+        evt.stop();
+      }
+    }, { priority: 'highest' });
+
     editor.plugins
       .get('ContextualBalloon')
       .on('set:visibleView', (evt, propertyName, newValue, oldValue) => {
+        if (newValue === linkFormView) {
+          this.existingUrl = linkFormView.urlInputView.fieldView.element.value;
+        }
         if (newValue !== linkFormView || wasAutocompleteAdded) {
+          // Urls not selected from autocomplete should never have attributes.
+          if (!selected) {
+            this.set('entityType', null);
+            this.set('entityUuid', null);
+            this.set('entitySubstitution', null);
+          }
+          selected = false;
           return;
         }
 
-      /**
-       * Used to know if a selection was made from the autocomplete results.
-       *
-       * @type {boolean}
-       */
-      let selected;
-
       initializeAutocomplete(
         linkFormView.urlInputView.fieldView.element,
         {
