Search and answer engines
People find government services through a search box or by asking an assistant. Both read the same things: the head of the page, its structure, and a little structured data. This is what to put there.
afrigov's components give you the structure for free: one h1, headings in order, real lists and tables,
links that say where they go, dates in time. The rest is content you supply per page.
The head of every page
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Renew a passport – Ministry of Interior</title>
<meta name="description" content="Renew an adult passport online. It takes about 10 minutes and costs ₦35,000. You need your current passport and a payment card.">
<link rel="canonical" href="https://interior.gov.ng/passports/renew">
<!-- How the page looks when it is shared -->
<meta property="og:title" content="Renew a passport">
<meta property="og:description" content="Renew an adult passport online in about 10 minutes.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://interior.gov.ng/passports/renew">
<meta property="og:image" content="https://interior.gov.ng/images/share.png">
</head>
-
Title: the page, a dash, the organisation. The same words as the
h1. Under 60 characters where you can. - Description: one or two sentences that answer "what can I do here and what do I need", under 160 characters. It is what shows under the link in results. Every page gets its own.
- Canonical: the one address of this page, so copies with tracking parameters or a trailing slash do not compete with it.
-
Language:
langonhtml, andhreflanglinks between translations. The language switcher carries the same information for people. - Share image: one image for the whole site is enough: the crest and the organisation's name on a plain background, 1200 by 630.
Structured data
A small block of JSON-LD tells search engines and assistants what the page is, in terms they do not have to guess. Four types cover most of a government site.
The organisation, on the home page
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "GovernmentOrganization",
"name": "Ministry of Interior",
"url": "https://interior.gov.ng/",
"logo": "https://interior.gov.ng/images/crest.png",
"parentOrganization": { "@type": "GovernmentOrganization", "name": "Federal Government of Nigeria" },
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Government Road",
"addressLocality": "Abuja",
"addressCountry": "NG"
},
"contactPoint": { "@type": "ContactPoint", "telephone": "+234-800-000-0000", "contactType": "customer service", "availableLanguage": ["en", "ha"] },
"sameAs": ["https://x.com/interiorng", "https://www.facebook.com/interiorng"]
}
</script>
A service, on its start page
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "GovernmentService",
"name": "Renew a passport",
"description": "Renew an adult passport online and collect it from the office you choose.",
"serviceType": "Passport renewal",
"provider": { "@type": "GovernmentOrganization", "name": "Ministry of Interior" },
"areaServed": { "@type": "Country", "name": "Nigeria" },
"availableChannel": { "@type": "ServiceChannel", "serviceUrl": "https://interior.gov.ng/passports/renew" },
"offers": { "@type": "Offer", "price": "35000", "priceCurrency": "NGN" }
}
</script>
Where the page sits, wherever there is a breadcrumb
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://interior.gov.ng/" },
{ "@type": "ListItem", "position": 2, "name": "Passports", "item": "https://interior.gov.ng/passports" },
{ "@type": "ListItem", "position": 3, "name": "Renew a passport" }
]
}
</script>
News, and questions with answers
A news page uses NewsArticle with headline, datePublished,
dateModified and the organisation as publisher. A page of questions in an
accordion uses FAQPage, with each question and the full text
of its answer. The answers must be the ones on the page, word for word.
Writing so you are quoted correctly
An assistant that answers "how do I renew my passport in Nigeria" lifts a sentence or two from a page. Make the right sentence easy to lift.
- Answer first. Under a heading that is a question, the first sentence is the answer: "It costs ₦35,000 and takes six weeks." Detail follows.
- Headings people would type. "What you need", "How much it costs", "How long it takes". Not "Overview" or "Introduction".
- Facts as text, not pictures. Fees, deadlines and addresses in the page itself, never only in an image or a PDF. A table with a caption for anything with rows.
-
Dates you can trust. Every date in a
timeelement, and "Last updated" on any page whose facts change. An answer with a date is an answer people can check. - One page per thing. One service, one page, one address. Two pages that both half-answer a question will both be passed over.
- Hidden text still counts. The accordion and details components keep their content in the page, so it is read by search engines whether open or closed.
The two files at the root
-
robots.txtallows everything public and names the sitemap. Do not block the stylesheet or script folders; search engines render pages to read them. -
sitemap.xmllists every public page with the date it last changed. Regenerate it when you publish.
User-agent: *
Allow: /
Sitemap: https://interior.gov.ng/sitemap.xml
When to keep a page out
<meta name="robots" content="noindex"> belongs on test and staging sites, on the pages inside a
form journey after the start page, and on confirmation pages that carry a reference number. It does not belong on
anything the public should find. Check before launch: a forgotten noindex from staging is the commonest
reason a new government site cannot be found.
What you get without doing anything
- A fast first paint: the core stylesheet is 10 KB compressed and there are no web fonts to wait for.
- No layout shift from the menu, with the two lines in the head shown on Get started.
- Semantic HTML from every component, which is what crawlers and assistants read.
- Pages that pass the accessibility checks search engines also score.