25,193 schools make ~317 million pairs. The bare page stays indexable as the landing page for the head term; the parameter space goes noindex, follow so its outbound links still count. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
54 lines
2.2 KiB
TypeScript
54 lines
2.2 KiB
TypeScript
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');
|
|
});
|
|
});
|