Perfect Postcode
Page not found
We couldn't find {path_e}.
It may have moved, or the link might be incomplete.
Back to Perfect Postcode
"#
);
let mut response = Response::new(Body::from(html));
*response.status_mut() = StatusCode::NOT_FOUND;
response.headers_mut().insert(
header::CONTENT_TYPE,
header::HeaderValue::from_static("text/html; charset=utf-8"),
);
response
}
fn route_seo_tags(
page: &SeoPage,
path: &str,
query_string: &str,
public_url: &str,
language: &str,
) -> String {
let path_e = escape_attr(path);
let query_e = escape_attr(query_string);
// Generated data pages have a clean URL with no query, but their OG card must frame the finding's
// map view rather than the default whole-England map. Use the registry's screenshot query.
let screenshot_query_base = match crate::generated_data_pages::data_page(trim_trailing_slash(path)) {
Some(dp) if !dp.screenshot_query.is_empty() => dp.screenshot_query,
_ => query_string,
};
let screenshot_query_string = query_string_with_language(screenshot_query_base, language);
let screenshot_query_e = escape_attr(&screenshot_query_string);
let public_url_e = escape_attr(public_url.trim_end_matches('/'));
let canonical_path_e = escape_attr(page.canonical_path);
let title_e = escape_attr(page.title);
let description_e = escape_attr(page.description);
let is_invite = path.starts_with("/invite/");
let og_image_url = if is_invite {
if screenshot_query_string.is_empty() {
format!("{public_url_e}/api/screenshot?og=1&path={path_e}")
} else {
format!("{public_url_e}/api/screenshot?og=1&path={path_e}&{screenshot_query_e}")
}
} else if screenshot_query_string.is_empty() {
format!("{public_url_e}/api/screenshot?og=1")
} else {
format!("{public_url_e}/api/screenshot?og=1&{screenshot_query_e}")
};
let canonical_url = format!("{public_url_e}{canonical_path_e}");
let og_url = if query_string.is_empty() {
format!("{public_url_e}{path_e}")
} else {
format!("{public_url_e}{path_e}?{query_e}")
};
let robots = if page.indexable {
"index,follow"
} else {
"noindex,follow"
};
// Emit hreflang alternates for indexable pages so search engines can serve
// the right localized variant (the SPA switches language via ?lang=).
let hreflang = if page.indexable {
let mut tags = String::new();
for lang in supported_languages() {
tags.push_str(&format!(
"\n