private function computeAndStorePathAlias($nodeId, $siteId, $outdated = null)
    {
        $transaction = null;

        try {
            $transaction = $this->database->startTransaction();
            $computed = $this->computePathAlias($nodeId, $siteId);

            // In all cases, delete outdated item if exists and backup
            // it into the {ucms_seo_redirect} table with an expire. Not
            // for self, and for all people still using MySQL, RETURNING
            // clause would have been great here.
            $this
                ->database
                ->query(
                    "DELETE FROM {ucms_seo_route} WHERE node_id = :node AND site_id = :site",
                    [':node' => $nodeId, ':site' => $siteId]
                )
            ;

            // @todo ucms_seo_redirect does not handle duplicates at all
            //   and will let you insert pretty much everything, we'll see
            //   later for this; but this is bad, we cannot deduplicate what
            //   are old sites urls and expired urls from us
            if ($outdated) {
                $this
                    ->database
                    ->insert('ucms_seo_redirect')
                    ->fields([
                        'nid'     => $nodeId,
                        'site_id' => $siteId,
                        'path'    => '/' . $outdated,
                        'expires' => (new \DateTime(self::DEFAULT_EXPIRE))->format('Y-m-d H:i:s'),
                    ])
                    ->execute()
                ;
            }

            if ($computed) {
                $computed = $this->deduplicate($nodeId, $siteId, $computed);

                $this
                    ->database
                    ->insert('ucms_seo_route')
                    ->fields([
                        'node_id'       => $nodeId,
                        'site_id'       => $siteId,
                        'route'         => $computed,
                        'is_protected'  => 0,
                        'is_outdated'   => 0,
                    ])
                    ->execute()
                ;
            }

            // Explicit commit
            unset($transaction);

            return $computed;

        } catch (\PDOException $e) {
            try {
                if ($transaction) {
                    $transaction->rollback();
                }
            } catch (\Exception $e2) {
                // You are fucked.
                watchdog_exception(__FUNCTION__, $e2);
            }

            throw $e;
        }
    }