private function ensureUniqueUrl(NodeTranslation $translation, EntityManagerInterface $em, array $flashes = [])
    {
        // Can't use GetRef here yet since the NodeVersions aren't loaded yet for some reason.
        $nodeVersion = $translation->getPublicNodeVersion();
        $page = $em->getRepository($nodeVersion->getRefEntityName())
            ->find($nodeVersion->getRefId());

        if (null === $page) {
            return false;
        }

        $isStructureNode = $page->isStructureNode();

        // If it's a StructureNode the slug and url should be empty.
        if ($isStructureNode) {
            $translation->setSlug('');
            $translation->setUrl($translation->getFullSlug());

            return true;
        }

        /* @var NodeTranslationRepository $nodeTranslationRepository */
        $nodeTranslationRepository = $em->getRepository(NodeTranslation::class);

        if ($translation->getUrl() === $translation->getFullSlug()) {
            $this->logger->debug(
                sprintf(
                    'Evaluating URL for NT %s getUrl: "%s" getFullSlug: "%s"',
                    $translation->getId(),
                    $translation->getUrl(),
                    $translation->getFullSlug()
                )
            );

            return false;
        }

        // Adjust the URL.
        $translation->setUrl($translation->getFullSlug());

        // Find all translations with this new URL, whose nodes are not deleted.
        $translations = $nodeTranslationRepository->getAllNodeTranslationsForUrl(
            $translation->getUrl(),
            $translation->getLang(),
            false,
            $translation,
            $this->domainConfiguration->getRootNode()
        );

        $this->logger->debug(
            sprintf(
                'Found %s node(s) that math url "%s"',
                \count($translations),
                $translation->getUrl()
            )
        );

        $translationsWithSameUrl = [];

        /** @var NodeTranslation $trans */
        foreach ($translations as $trans) {
            if (!$this->pagesConfiguration->isStructureNode($trans->getPublicNodeVersion()->getRefEntityName())) {
                $translationsWithSameUrl[] = $trans;
            }
        }

        if (\count($translationsWithSameUrl) > 0) {
            $oldUrl = $translation->getFullSlug();
            $translation->setSlug(
                $this->slugifier->slugify(
                    $this->incrementString($translation->getSlug())
                )
            );
            $newUrl = $translation->getFullSlug();

            $message = sprintf(
                'The URL of the page has been changed from %s to %s since another page already uses this URL',
                $oldUrl,
                $newUrl
            );
            $this->logger->info($message);
            $flashes[] = $message;

            $this->ensureUniqueUrl($translation, $em, $flashes);
        } elseif (\count($flashes) > 0 && $this->isInRequestScope()) {
            // No translations found so we're certain we can show this message.
            $flash = current(\array_slice($flashes, -1));
            $this->flashBag->add(FlashTypes::WARNING, $flash);
        }

        return true;
    }