diff --git a/changes/changelog.d/287.bugfix b/changes/changelog.d/287.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..ce14736ad1db4065e086a9c3e5404545b19c5a69
--- /dev/null
+++ b/changes/changelog.d/287.bugfix
@@ -0,0 +1 @@
+Fixed duplicated websocket connexion on timeline (#287)
diff --git a/front/src/views/instance/Timeline.vue b/front/src/views/instance/Timeline.vue
index 2ab8b708cd1ae140d31c7ca3c5e1cc3f56631f51..03bd5a53758373257239d054f6ffbead3569d9fe 100644
--- a/front/src/views/instance/Timeline.vue
+++ b/front/src/views/instance/Timeline.vue
@@ -34,6 +34,7 @@ export default {
   data () {
     return {
       isLoading: false,
+      bridge: null,
       components: {
         'Like': Like,
         'Listen': Listen
@@ -44,6 +45,9 @@ export default {
     this.openWebsocket()
     this.fetchEvents()
   },
+  destroyed () {
+    this.disconnect()
+  },
   computed: {
     ...mapState({
       events: state => state.instance.events
@@ -58,14 +62,22 @@ export default {
         self.$store.commit('instance/events', response.data.results)
       })
     },
+    disconnect () {
+      if (!this.bridge) {
+        return
+      }
+      this.bridge.socket.close(1000, 'goodbye', {keepClosed: true})
+    },
     openWebsocket () {
       if (!this.$store.state.auth.authenticated) {
         return
       }
+      this.disconnect()
       let self = this
       let token = this.$store.state.auth.token
       // let token = 'test'
       const bridge = new WebSocketBridge()
+      this.bridge = bridge
       bridge.connect(
         `/api/v1/instance/activity?token=${token}`,
         null,