From a2f61a44fb66ba3fb3ae8aa91b9a7f730b3a5602 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Wed, 19 Mar 2025 15:04:48 +0300 Subject: [PATCH 1/9] feat: Added canonical links support --- styles/templates/default/page_header.tpl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/styles/templates/default/page_header.tpl b/styles/templates/default/page_header.tpl index 4fa536406..e49890650 100644 --- a/styles/templates/default/page_header.tpl +++ b/styles/templates/default/page_header.tpl @@ -20,6 +20,9 @@ + + + From 23e24cc072fd58cf68b2804d8bb207228efb6fd0 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Wed, 19 Mar 2025 15:14:39 +0300 Subject: [PATCH 2/9] Update page_header.php --- library/includes/page_header.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/library/includes/page_header.php b/library/includes/page_header.php index edd08f58b..1a43b66d4 100644 --- a/library/includes/page_header.php +++ b/library/includes/page_header.php @@ -108,6 +108,11 @@ $template->assign_vars([ 'HAVE_UNREAD_PM' => $have_unread_pm ]); +// Canonical links +if (!isset($page_cfg['canonical_link'])) { + $page_cfg['canonical_link'] = FULL_URL . basename($_SERVER['REQUEST_URI']); +} + // The following assigns all _common_ variables that may be used at any point in a template $template->assign_vars([ 'SIMPLE_HEADER' => !empty($gen_simple_header), @@ -123,6 +128,7 @@ $template->assign_vars([ 'USE_TABLESORTER' => !empty($page_cfg['use_tablesorter']), 'ALLOW_ROBOTS' => !$bb_cfg['board_disable'] && (!isset($page_cfg['allow_robots']) || $page_cfg['allow_robots'] === true), + 'META_CANONICAL' => $page_cfg['canonical_link'], 'SITENAME' => $bb_cfg['sitename'], 'U_INDEX' => BB_ROOT . 'index.php', From fc28d620b044861728ebe3cc26b2e344ed04026b Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:29:11 +0300 Subject: [PATCH 3/9] Updated --- library/includes/functions.php | 37 ++++++++++++++++++++++++++++++++ library/includes/page_header.php | 2 +- profile.php | 3 +++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/library/includes/functions.php b/library/includes/functions.php index 67256eb1f..a18681a90 100644 --- a/library/includes/functions.php +++ b/library/includes/functions.php @@ -2236,3 +2236,40 @@ function infoByIP(string $ipAddress, int $port = 0): array return $data; } + +/** + * Generates canonical url + * + * @return string + */ +function getCanonicalUrl(): string +{ + $fullUrl = rtrim(FULL_URL, '/'); + $script = $_SERVER['SCRIPT_NAME']; + + $allowedParams = [ + POST_CAT_URL, + POST_FORUM_URL, + POST_GROUPS_URL, + POST_POST_URL, + POST_TOPIC_URL, + POST_USERS_URL, + ]; + + $params = []; + foreach ($allowedParams as $key) { + if (isset($_GET[$key])) { + $params[$key] = $_GET[$key]; + } + } + + if (!empty($params)) { + ksort($params); + $queryString = http_build_query($params, '', '&', PHP_QUERY_RFC3986); + $url = $fullUrl . $script . "?$queryString"; + } else { + $url = $fullUrl . $script; + } + + return htmlCHR($url); +} diff --git a/library/includes/page_header.php b/library/includes/page_header.php index d33a57459..fdeaa3e97 100644 --- a/library/includes/page_header.php +++ b/library/includes/page_header.php @@ -123,7 +123,7 @@ $template->assign_vars([ 'USE_TABLESORTER' => !empty($page_cfg['use_tablesorter']), 'ALLOW_ROBOTS' => !$bb_cfg['board_disable'] && (!isset($page_cfg['allow_robots']) || $page_cfg['allow_robots'] === true), - 'META_CANONICAL' => $page_cfg['canonical_link'] ?? '', + 'META_CANONICAL' => $page_cfg['canonical_link'] ?? getCanonicalUrl(), 'META_DESCRIPTION' => $page_cfg['meta_description'] ?? '', 'SITENAME' => $bb_cfg['sitename'], diff --git a/profile.php b/profile.php index 9f036bf7e..6f3f80bba 100644 --- a/profile.php +++ b/profile.php @@ -15,6 +15,9 @@ require __DIR__ . '/common.php'; // Start session management $user->session_start(); +// Disable canonical for this page +$page_cfg['canonical_link'] = false; + set_die_append_msg(); $mode = request_var('mode', 'viewprofile'); From a9e9632c7f92ee1308f6ce2cf1d21fabebd09dde Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:30:28 +0300 Subject: [PATCH 4/9] Updated --- profile.php | 6 +++--- search.php | 3 +++ tracker.php | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/profile.php b/profile.php index 6f3f80bba..c4c1883ff 100644 --- a/profile.php +++ b/profile.php @@ -12,12 +12,12 @@ define('IN_PROFILE', true); require __DIR__ . '/common.php'; -// Start session management -$user->session_start(); - // Disable canonical for this page $page_cfg['canonical_link'] = false; +// Start session management +$user->session_start(); + set_die_append_msg(); $mode = request_var('mode', 'viewprofile'); diff --git a/search.php b/search.php index 5e85b5940..51aead7e6 100644 --- a/search.php +++ b/search.php @@ -19,6 +19,9 @@ $page_cfg['load_tpl_vars'] = [ 'topic_icons' ]; +// Disable canonical for this page +$page_cfg['canonical_link'] = false; + // Start session management $user->session_start(array('req_login' => $bb_cfg['disable_search_for_guest'])); diff --git a/tracker.php b/tracker.php index 2e94615b9..8fca7cae8 100644 --- a/tracker.php +++ b/tracker.php @@ -18,6 +18,9 @@ $page_cfg['load_tpl_vars'] = [ 'post_icons' ]; +// Disable canonical for this page +$page_cfg['canonical_link'] = false; + // Session start $user->session_start(array('req_login' => $bb_cfg['bt_tor_browse_only_reg'])); From 98d64c3212677d38db5d63f20115774ae79b09cd Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:32:11 +0300 Subject: [PATCH 5/9] Updated --- profile.php | 3 --- search.php | 3 --- tracker.php | 3 --- 3 files changed, 9 deletions(-) diff --git a/profile.php b/profile.php index c4c1883ff..9f036bf7e 100644 --- a/profile.php +++ b/profile.php @@ -12,9 +12,6 @@ define('IN_PROFILE', true); require __DIR__ . '/common.php'; -// Disable canonical for this page -$page_cfg['canonical_link'] = false; - // Start session management $user->session_start(); diff --git a/search.php b/search.php index 51aead7e6..5e85b5940 100644 --- a/search.php +++ b/search.php @@ -19,9 +19,6 @@ $page_cfg['load_tpl_vars'] = [ 'topic_icons' ]; -// Disable canonical for this page -$page_cfg['canonical_link'] = false; - // Start session management $user->session_start(array('req_login' => $bb_cfg['disable_search_for_guest'])); diff --git a/tracker.php b/tracker.php index 8fca7cae8..2e94615b9 100644 --- a/tracker.php +++ b/tracker.php @@ -18,9 +18,6 @@ $page_cfg['load_tpl_vars'] = [ 'post_icons' ]; -// Disable canonical for this page -$page_cfg['canonical_link'] = false; - // Session start $user->session_start(array('req_login' => $bb_cfg['bt_tor_browse_only_reg'])); From 80a749cf060761e088c41d76add7e1202a455da3 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:36:57 +0300 Subject: [PATCH 6/9] Update page_header.php --- library/includes/page_header.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/includes/page_header.php b/library/includes/page_header.php index fdeaa3e97..d5a86fcc8 100644 --- a/library/includes/page_header.php +++ b/library/includes/page_header.php @@ -123,7 +123,9 @@ $template->assign_vars([ 'USE_TABLESORTER' => !empty($page_cfg['use_tablesorter']), 'ALLOW_ROBOTS' => !$bb_cfg['board_disable'] && (!isset($page_cfg['allow_robots']) || $page_cfg['allow_robots'] === true), - 'META_CANONICAL' => $page_cfg['canonical_link'] ?? getCanonicalUrl(), + 'META_CANONICAL' => (isset($page_cfg['canonical_link']) && $page_cfg['canonical_link'] === true) + ? getCanonicalUrl() + : ((is_string($page_cfg['canonical_link'])) ? $page_cfg['canonical_link'] : false), 'META_DESCRIPTION' => $page_cfg['meta_description'] ?? '', 'SITENAME' => $bb_cfg['sitename'], From 6ddee254f1e56939a2419ab031934dc4dfe4b04d Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:41:16 +0300 Subject: [PATCH 7/9] Updated --- index.php | 1 + library/includes/page_header.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/index.php b/index.php index 2c752341c..733074d79 100644 --- a/index.php +++ b/index.php @@ -14,6 +14,7 @@ require __DIR__ . '/common.php'; $page_cfg['load_tpl_vars'] = [ 'post_icons' ]; +$page_cfg['canonical_link'] = true; // Show last topic $show_last_topic = true; diff --git a/library/includes/page_header.php b/library/includes/page_header.php index d5a86fcc8..0c715ddaa 100644 --- a/library/includes/page_header.php +++ b/library/includes/page_header.php @@ -125,7 +125,7 @@ $template->assign_vars([ 'ALLOW_ROBOTS' => !$bb_cfg['board_disable'] && (!isset($page_cfg['allow_robots']) || $page_cfg['allow_robots'] === true), 'META_CANONICAL' => (isset($page_cfg['canonical_link']) && $page_cfg['canonical_link'] === true) ? getCanonicalUrl() - : ((is_string($page_cfg['canonical_link'])) ? $page_cfg['canonical_link'] : false), + : ((isset($page_cfg['canonical_link']) && is_string($page_cfg['canonical_link'])) ? $page_cfg['canonical_link'] : false), 'META_DESCRIPTION' => $page_cfg['meta_description'] ?? '', 'SITENAME' => $bb_cfg['sitename'], From e6f00b9492f359f1f5e7618f5bee9bec5ae817aa Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:41:45 +0300 Subject: [PATCH 8/9] Updated --- viewforum.php | 1 + viewtopic.php | 1 + 2 files changed, 2 insertions(+) diff --git a/viewforum.php b/viewforum.php index 7a1cdb4a3..17b962e9e 100644 --- a/viewforum.php +++ b/viewforum.php @@ -12,6 +12,7 @@ define('BB_SCRIPT', 'forum'); require __DIR__ . '/common.php'; $page_cfg['include_bbcode_js'] = true; +$page_cfg['canonical_link'] = true; $show_last_topic = true; $last_topic_max_len = 40; diff --git a/viewtopic.php b/viewtopic.php index f952e0f15..e71470904 100644 --- a/viewtopic.php +++ b/viewtopic.php @@ -22,6 +22,7 @@ $page_cfg['load_tpl_vars'] = [ 'post_icons', 'topic_icons' ]; +$page_cfg['canonical_link'] = true; $newest = $next_topic_id = 0; $start = isset($_GET['start']) ? abs((int)$_GET['start']) : 0; From a556a6146c8973a645834b2dbddd43e167fa5099 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Sun, 8 Jun 2025 13:46:25 +0300 Subject: [PATCH 9/9] Update functions.php --- library/includes/functions.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/library/includes/functions.php b/library/includes/functions.php index a18681a90..2f0764ed1 100644 --- a/library/includes/functions.php +++ b/library/includes/functions.php @@ -2254,6 +2254,9 @@ function getCanonicalUrl(): string POST_POST_URL, POST_TOPIC_URL, POST_USERS_URL, + 'sort', + 'start', + 'order' ]; $params = [];