diff --git a/Classes/SignalSlot/SitemapSignalSlot.php b/Classes/SignalSlot/SitemapSignalSlot.php
new file mode 100644
index 0000000000000000000000000000000000000000..a6ce4eb1048a1665a181b8758ff63a0540375328
--- /dev/null
+++ b/Classes/SignalSlot/SitemapSignalSlot.php
@@ -0,0 +1,112 @@
+<?php
+
+namespace SGalinski\SgJobs\SignalSlot;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) sgalinski Internet Services (https://www.sgalinski.de)
+ *
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
+use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
+use TYPO3\CMS\Extbase\Object\ObjectManager;
+use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
+
+/**
+ * Signal functions regarding sg_seo sitemap generation
+ */
+class SitemapSignalSlot {
+	const PLUGIN_NAME = 'sgjobs_jobapplication';
+
+	/**
+	 * @var UriBuilder
+	 */
+	protected $uriBuilder;
+
+	/**
+	 * Before the sitemap is generated
+	 *
+	 * @param array $pageList
+	 * @throws \TYPO3\CMS\Core\Error\Http\ServiceUnavailableException
+	 */
+	public function beforeSitemapGeneration(array &$pageList) {
+		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
+		$request = $objectManager->get(\TYPO3\CMS\Extbase\Mvc\Web\Request::class);
+		$request->setRequestUri(GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL'));
+		$request->setBaseUri(GeneralUtility::getIndpEnv('TYPO3_SITE_URL'));
+
+		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
+		$contentObjectRenderer = $objectManager->get(ContentObjectRenderer::class);
+
+		$configurationManager = $objectManager->get(ConfigurationManager::class);
+		$configurationManager->setContentObject($contentObjectRenderer);
+		$this->uriBuilder = $objectManager->get(UriBuilder::class);
+		$this->uriBuilder->injectConfigurationManager($configurationManager);
+
+		// find sites where job detail plugin is added
+		$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+		$databaseResource = $queryBuilder->select('pid', 'pages')
+			->from('tt_content')
+			->where(
+				$queryBuilder->expr()->andX(
+					$queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('list')),
+					$queryBuilder->expr()->eq('list_type', $queryBuilder->createNamedParameter(self::PLUGIN_NAME))
+				)
+			)
+			->execute();
+
+		$rows = $databaseResource->fetchAll();
+
+		foreach ($rows as $row) {
+			$jobs = $this->getJobsByPid($row['pages']);
+
+			foreach ($jobs as $job) {
+				$url = $this->uriBuilder->reset()->setTargetPageUid($row['pid'])->setArguments(
+					['tx_sgjobs_jobapplication' => ['jobId' => $job['uid']]]
+				)->setCreateAbsoluteUri(TRUE)->buildFrontendUri();
+
+				$pageList[] = [
+					'url' => $url,
+					'title' => ''
+				];
+			}
+		}
+	}
+
+	/**
+	 * Get all jobs stored on specific page ids
+	 *
+	 * @param string $pageList
+	 * @return array|null
+	 */
+	private function getJobsByPid($pageList) {
+		$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+		$databaseResource = $queryBuilder->select('*')
+			->from('tx_sgjobs_domain_model_job')
+			->where($queryBuilder->expr()->in('pid', $queryBuilder->createNamedParameter($pageList)))
+			->execute();
+
+		return $databaseResource->fetchAll();
+	}
+}
diff --git a/ext_localconf.php b/ext_localconf.php
index 1d8f94ab7ddc70e576b32695cf5606772cef6355..a801f268b230f80bef451339322d916becb072a5 100644
--- a/ext_localconf.php
+++ b/ext_localconf.php
@@ -59,3 +59,15 @@ if (TYPO3_MODE === 'BE') {
 
 	\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup(file_get_contents($tsPath . 'setup.ts'));
 }
+
+// signal slot for sg_seo integration
+/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */
+$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
+	\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class
+);
+$signalSlotDispatcher->connect(
+	\SGalinski\SgSeo\Generator\PagesSitemapGenerator::class,
+	'accessPageList',
+	\SGalinski\SgJobs\SignalSlot\SitemapSignalSlot::class,
+	'beforeSitemapGeneration'
+);