diff --git a/VERSION b/VERSION
index 276cbf9e2858c779297bb9f73b34170302949ec4..197c4d5c2d7c724b4cd0048f4e3574bb3fa5c8db 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.3.0
+2.4.0
diff --git a/lib/PZ/Controller/Shortcut.pm b/lib/PZ/Controller/Shortcut.pm
index 6787f93116e061357012cab29b34ab687e1d0cfc..2e7b354497ef3c55d81e3f4f0598b2a51f1db669 100644
--- a/lib/PZ/Controller/Shortcut.pm
+++ b/lib/PZ/Controller/Shortcut.pm
@@ -3,6 +3,7 @@ use Mojo::Base 'Mojolicious::Controller', -signatures;
 
 use Data::Validate::URI qw(is_uri);
 use Image::PNG::QRCode 'qrpng';
+use Mojo::UserAgent;
 
 use constant SHORTCUT => qr/^[a-z\d\-]{1,8}$/;
 
@@ -49,7 +50,7 @@ sub create ($c) {
     $c->openapi->valid_input or return;
     my $args = $c->req->json;
 
-    my $url = $args->{url};
+    my $url = $c->sanitize_url($args->{url});
     return $c->error(400, 'Chybná URL adresa!') if ! is_uri($url);
 
     my $custom = lc($args->{shortcut});
@@ -65,8 +66,16 @@ sub create ($c) {
         return $c->error(400, "Zkratka $custom už je použitá") if $exists;
     }
 
+    my $title = '';
+    my $ua    = Mojo::UserAgent->new;
+
+    eval {
+        $title = $ua->get($url)->result->dom->at('title')->text;
+    };
+
     my $shortcut = $c->user->add_to_shortcuts({
-        url      => $c->sanitize_url($url),
+        url      => $url,
+        title    => $title,
         shortcut => ($custom || $c->schema->resultset('Shortcut')->generate())
     });
 
@@ -85,8 +94,9 @@ sub update ($c) {
     my $shortcut = $c->shortcut() || return;
     return $c->error(400, 'Chybná URL adresa!') if ! is_uri($c->req->json->{url});
     $shortcut->update({
-        code => $c->req->json->{code},
-        url  => $c->req->json->{url},
+        code  => $c->req->json->{code},
+        url   => $c->req->json->{url},
+        title => $c->req->json->{title},
     });
     $c->render(status => 204, text => '' );
 }
diff --git a/openapi.yaml b/openapi.yaml
index cc8b71bd9a760339fb1180ccec5d208cf8e4f336..578a1e964be305236fca973796a0bc920444a044 100644
--- a/openapi.yaml
+++ b/openapi.yaml
@@ -37,6 +37,10 @@ components:
           type: string
           description: URL pro přesměrování
           maxLength: 1024
+        title:
+          type: string
+          description: Titulek stránky
+          maxLength: 4096
         code:
           type: integer
           description: Kód přesměrování
diff --git a/templates/shortcuts.html.ep b/templates/shortcuts.html.ep
index 8c580ca0e4faa36132140c4616dde4b86a951e76..f2fc2967d0c1e309adca8dbd30d96fd8a238926e 100644
--- a/templates/shortcuts.html.ep
+++ b/templates/shortcuts.html.ep
@@ -41,11 +41,11 @@
   </thead>
   <tbody>
   <tr v-for="shortcut in shortcuts" >
-    <td class="text-bold w-32" @click="showEdit(shortcut)" >{{shortcut.shortcut}}</td>
-    <td class="text-bold w-32" @click="showEdit(shortcut)" >{{ formatTimestamp(shortcut.created) }}</td>
-    <td v-bind:title="shortcut.url" @click="showEdit(shortcut)" >{{ stripURL(shortcut.url) }}</td>
-    <td class="w-24" @click="showEdit(shortcut)">{{ shortcut.code == 301 ? '301 trvalé' : '302 dočasné'}}</td>
-    <td class="w-16 text-right" @click="showEdit(shortcut)">{{shortcut.counter}}</td>
+    <td v-bind:title="shortcut.title" class="text-bold w-32" @click="showInfo(shortcut)" >{{shortcut.shortcut}}</td>
+    <td class="text-bold w-32" @click="showInfo(shortcut)" >{{ formatTimestamp(shortcut.created) }}</td>
+    <td v-bind:title="shortcut.url" @click="showInfo(shortcut)" >{{ stripURL(shortcut.url) }}</td>
+    <td class="w-24" @click="showInfo(shortcut)">{{ shortcut.code == 301 ? '301 trvalé' : '302 dočasné'}}</td>
+    <td class="w-16 text-right" @click="showInfo(shortcut)">{{shortcut.counter}}</td>
     <td class="w-40">
         <i class="ico--link cursor-pointer mx-1" @click="showInfo(shortcut)" title="Zkopirovat odkaz"></i>
         <i class="ico--calendar cursor-pointer mx-1" @click="window.location.href ='/shortcut/' + shortcut.id" title="Statistika"></i>
@@ -65,7 +65,7 @@
           <div class="card__body w-80 text-center">
             <p class="card-body-text">Zkratka byla zkopírovana do schránky. Pro její sdílení můžete používat i QR kód</p>
             <img v-bind:src="'/' + selectedShortcut.shortcut + '/qr.png'" class="mx-auto my-8">
-            <b>{{ selectedShortcut.full_url }}</b>
+            <b><a v-bind:href="selectedShortcut.full_url">{{ selectedShortcut.full_url }}</a></b>
           </div>
         </div>
       </div>
@@ -111,7 +111,7 @@
 
                 <form class="my-4">
 
-                    <div class="form-field form-field--error form-field--required mb-4">
+                    <div class="form-field form-field--required mb-4">
                       <label class="form-field__label" for="url">URL</label>
                       <div class="form-field__wrapper form-field__wrapper--shadowed">
                         <input type="text" class="text-input form-field__control form-field--required" value="" v-model="selectedShortcut.url" id="url" />
@@ -119,7 +119,7 @@
                       <div class="form-field__error" v-if="selectedShortcut.url === ''"></div>
                     </div>
 
-                    <div class="form-field form-field--error form-field--required mb-4">
+                    <div class="form-field form-field--required mb-4">
                       <label class="form-field__label" for="code">Typ přesměrování</label>
                       <div class="form-field__wrapper form-field__wrapper--shadowed select">
                         <select v-model="selectedShortcut.code"  class="select__control form-field__control ">
@@ -127,7 +127,13 @@
                             <option value="302">302 dočasné</option>
                         </select>
                       </div>
-                      <div class="form-field__error" v-if="shortcut.url === ''"></div>
+                    </div>
+
+                    <div class="form-field mb-4">
+                      <label class="form-field__label" for="code">Titulek</label>
+                        <div class="form-field__wrapper form-field__wrapper--shadowed">
+                            <textarea class="text-input form-field__control"  v-model="selectedShortcut.title" rows="5" cols="40" placeholder="Titulek stránky"></textarea>
+                        </div>
                     </div>
 
                     <button class="btn btn--grey-500 btn--hoveractive" @click.prevent="updateShortcut">