import { metadata as homeMetadata } from '@/app/page'; import { metadata as rankingsMetadata } from '@/app/rankings/page'; import { metadata as admissionsMetadata } from '@/app/admissions/page'; import { generateMetadata as compareMetadata } from '@/app/compare/page'; describe('canonical URLs', () => { it('the homepage canonicalises to the bare root', () => { // page.tsx reads eleven search params. Without this, every filter // combination is a crawlable near-duplicate of the one page we want to // rank for "compare schools". expect(homeMetadata.alternates?.canonical) .toBe('https://www.schoolcompare.co.uk/'); }); it('rankings canonicalises to the bare path', () => { expect(rankingsMetadata.alternates?.canonical) .toBe('https://www.schoolcompare.co.uk/rankings'); }); it('admissions canonicalises to the bare path', () => { expect(admissionsMetadata.alternates?.canonical) .toBe('https://www.schoolcompare.co.uk/admissions'); }); }); describe('/compare indexability', () => { it('the bare compare page is indexable and canonical to itself', async () => { // This is the landing page for the "compare schools" head term. const meta = await compareMetadata({ searchParams: Promise.resolve({}) }); expect(meta.alternates?.canonical) .toBe('https://www.schoolcompare.co.uk/compare'); expect(meta.robots).toBeUndefined(); }); it('a comparison of specific schools is noindex, follow', async () => { // ~317 million pairs before triples. Indexing the parameter space would // swamp everything else in the corpus. const meta = await compareMetadata({ searchParams: Promise.resolve({ urns: '100001,100002' }), }); expect(meta.robots).toEqual({ index: false, follow: true }); }); it('a parameterised comparison still canonicalises to the bare path', async () => { // follow:true plus a canonical means the outbound links to each school // page still pass value even though this URL is not indexed. const meta = await compareMetadata({ searchParams: Promise.resolve({ urns: '100001,100002' }), }); expect(meta.alternates?.canonical) .toBe('https://www.schoolcompare.co.uk/compare'); }); });