@studyportals/fawkes 7.1.0 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/common/ISearchApplicationState.d.ts +1 -0
- package/dist/src/common/rules/IndexablePageNumberRule.d.ts +9 -0
- package/dist/src/common/rules/IndexablePageNumberRule.js +17 -0
- package/dist/src/organisations/IOrganisationSearchApplicationState.d.ts +1 -0
- package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.d.ts +1 -0
- package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.js +5 -0
- package/dist/src/organisations/policies/our-picks/Area.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/Area.js +4 -0
- package/dist/src/organisations/policies/our-picks/AreaAttendance.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/AreaAttendance.js +4 -0
- package/dist/src/organisations/policies/our-picks/Attendance.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/Attendance.js +4 -0
- package/dist/src/organisations/policies/our-picks/Continent.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/Continent.js +4 -0
- package/dist/src/organisations/policies/our-picks/Country.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/Country.js +4 -0
- package/dist/src/organisations/policies/our-picks/CountryAttendance.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/CountryAttendance.js +4 -0
- package/dist/src/organisations/policies/our-picks/Unfiltered.d.ts +2 -0
- package/dist/src/organisations/policies/our-picks/Unfiltered.js +4 -0
- package/dist/src/organisations/policies/ranked/RankedArea.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedAttendance.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedContinent.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedContinentAttendance.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedCountry.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedCountryAttendance.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedDiscipline.js +1 -0
- package/dist/src/organisations/policies/ranked/RankedUnfiltered.js +1 -0
- package/dist/src/programmes/rules/IndexablePageNumberRule.d.ts +1 -1
- package/dist/src/programmes/rules/IndexablePageNumberRule.js +6 -7
- package/dist/src/scholarships/policies/Area.d.ts +2 -1
- package/dist/src/scholarships/policies/Area.js +3 -1
- package/dist/src/scholarships/policies/Country.d.ts +3 -1
- package/dist/src/scholarships/policies/Country.js +6 -1
- package/dist/src/scholarships/policies/Discipline.d.ts +3 -1
- package/dist/src/scholarships/policies/Discipline.js +6 -1
- package/dist/src/scholarships/policies/DisciplineCountry.d.ts +3 -1
- package/dist/src/scholarships/policies/DisciplineCountry.js +6 -1
- package/dist/src/scholarships/policies/Unfiltered.d.ts +3 -1
- package/dist/src/scholarships/policies/Unfiltered.js +8 -1
- package/dist/src/scholarships/policies/UniversityCountry.d.ts +3 -1
- package/dist/src/scholarships/policies/UniversityCountry.js +6 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IRule } from '../IRule';
|
|
2
|
+
import { ISearchDependencies } from '../ISearchDependencies';
|
|
3
|
+
export declare class IndexablePageNumberRule implements IRule {
|
|
4
|
+
private readonly minimumPageNumber;
|
|
5
|
+
forSearch(dependencies: ISearchDependencies): Promise<boolean>;
|
|
6
|
+
forSitemapGenerator(): Promise<boolean>;
|
|
7
|
+
getName(): string;
|
|
8
|
+
getDescription(): string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class IndexablePageNumberRule {
|
|
2
|
+
minimumPageNumber = 1;
|
|
3
|
+
forSearch(dependencies) {
|
|
4
|
+
const { applicationState } = dependencies;
|
|
5
|
+
const isPageNumberIndexable = applicationState.getPageNumber() <= this.minimumPageNumber;
|
|
6
|
+
return Promise.resolve(isPageNumberIndexable);
|
|
7
|
+
}
|
|
8
|
+
forSitemapGenerator() {
|
|
9
|
+
return Promise.resolve(true);
|
|
10
|
+
}
|
|
11
|
+
getName() {
|
|
12
|
+
return 'IndexablePageNumberRule';
|
|
13
|
+
}
|
|
14
|
+
getDescription() {
|
|
15
|
+
return 'Indexable if the page number is 1';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -5,6 +5,7 @@ import { SortingOptions } from '../../enums/SortingOptions';
|
|
|
5
5
|
export declare abstract class OrganisationsSeoIndexabilityPolicy extends BaseSeoIndexabilityPolicy<IOrganisationsSeoDependencies> {
|
|
6
6
|
protected readonly indexablePortalTypes: PortalType[];
|
|
7
7
|
protected abstract readonly sortingOption: SortingOptions;
|
|
8
|
+
protected addIndexablePageNumberRule(): void;
|
|
8
9
|
generateSitemapUrls(): Promise<string[]>;
|
|
9
10
|
protected isIndexable(): Promise<boolean>;
|
|
10
11
|
protected getPathWithSortingOption(path: string): string;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { PortalType } from '@studyportals/domain-client';
|
|
2
2
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
3
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
3
4
|
export class OrganisationsSeoIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
|
|
4
5
|
indexablePortalTypes = [PortalType.MASTER];
|
|
6
|
+
addIndexablePageNumberRule() {
|
|
7
|
+
const indexablePageNumberRule = new IndexablePageNumberRule();
|
|
8
|
+
this.rules.push(indexablePageNumberRule);
|
|
9
|
+
}
|
|
5
10
|
async generateSitemapUrls() {
|
|
6
11
|
if (this.indexablePortalTypes.includes(this.dependencies.portalType)) {
|
|
7
12
|
return super.generateSitemapUrls();
|
|
@@ -3,11 +3,13 @@ import { SortingOptions } from '../../../enums/SortingOptions';
|
|
|
3
3
|
import { SingleValueSelectedForFilterRule } from '../../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
4
|
import { OrganisationsSeoIndexabilityPolicy } from '../../../organisations/policies/OrganisationsSeoIndexabilityPolicy';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../../common/rules/OnlyFiltersSelectedRule';
|
|
6
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
6
7
|
export declare class Area extends OrganisationsSeoIndexabilityPolicy {
|
|
7
8
|
readonly name: string;
|
|
8
9
|
readonly description: string;
|
|
9
10
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
10
11
|
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
|
|
12
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
11
13
|
protected generateUrls(): Promise<string[]>;
|
|
12
14
|
get filterCombination(): FilterCombinations;
|
|
13
15
|
}
|
|
@@ -14,6 +14,10 @@ export class Area extends OrganisationsSeoIndexabilityPolicy {
|
|
|
14
14
|
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
15
15
|
new OnlyFiltersSelectedRule([FilterKey.AREA, FilterKey.COUNTRY])
|
|
16
16
|
];
|
|
17
|
+
constructor(dependencies) {
|
|
18
|
+
super(dependencies);
|
|
19
|
+
this.addIndexablePageNumberRule();
|
|
20
|
+
}
|
|
17
21
|
async generateUrls() {
|
|
18
22
|
const areaFragments = AreaPresenter.getInstance().getFragments();
|
|
19
23
|
const paths = [];
|
|
@@ -5,11 +5,13 @@ import { SortingOptions } from '../../../enums/SortingOptions';
|
|
|
5
5
|
import { SingleValueSelectedForFilterRule } from '../../../common/rules/SingleValueSelectedForFilterRule';
|
|
6
6
|
import { OnlyFiltersSelectedRule } from '../../../common/rules/OnlyFiltersSelectedRule';
|
|
7
7
|
import { OnlineAttendanceRule } from '../../../common/rules/OnlineAttendanceRule';
|
|
8
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
8
9
|
export declare class AreaAttendance extends OrganisationsSeoIndexabilityPolicy {
|
|
9
10
|
readonly name: string;
|
|
10
11
|
readonly description: string;
|
|
11
12
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
12
13
|
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule | SearchVolumeAreasAttendanceRule)[];
|
|
14
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
13
15
|
protected generateUrls(): Promise<string[]>;
|
|
14
16
|
get filterCombination(): FilterCombinations;
|
|
15
17
|
}
|
|
@@ -20,6 +20,10 @@ export class AreaAttendance extends OrganisationsSeoIndexabilityPolicy {
|
|
|
20
20
|
new SearchVolumeAreasAttendanceRule(),
|
|
21
21
|
new OnlineAttendanceRule()
|
|
22
22
|
];
|
|
23
|
+
constructor(dependencies) {
|
|
24
|
+
super(dependencies);
|
|
25
|
+
this.addIndexablePageNumberRule();
|
|
26
|
+
}
|
|
23
27
|
async generateUrls() {
|
|
24
28
|
const areaFragments = AreaPresenter.getInstance().getFragments();
|
|
25
29
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
@@ -4,11 +4,13 @@ import { OrganisationsSeoIndexabilityPolicy } from '../../../organisations/polic
|
|
|
4
4
|
import { SingleValueSelectedForFilterRule } from '../../../common/rules/SingleValueSelectedForFilterRule';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../../common/rules/OnlyFiltersSelectedRule';
|
|
6
6
|
import { OnlineAttendanceRule } from '../../../common/rules/OnlineAttendanceRule';
|
|
7
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
7
8
|
export declare class Attendance extends OrganisationsSeoIndexabilityPolicy {
|
|
8
9
|
readonly name: string;
|
|
9
10
|
readonly description: string;
|
|
10
11
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
11
12
|
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule)[];
|
|
13
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
12
14
|
protected generateUrls(): Promise<string[]>;
|
|
13
15
|
get filterCombination(): FilterCombinations;
|
|
14
16
|
}
|
|
@@ -15,6 +15,10 @@ export class Attendance extends OrganisationsSeoIndexabilityPolicy {
|
|
|
15
15
|
new OnlyFiltersSelectedRule([FilterKey.DELIVERY_METHOD]),
|
|
16
16
|
new OnlineAttendanceRule()
|
|
17
17
|
];
|
|
18
|
+
constructor(dependencies) {
|
|
19
|
+
super(dependencies);
|
|
20
|
+
this.addIndexablePageNumberRule();
|
|
21
|
+
}
|
|
18
22
|
async generateUrls() {
|
|
19
23
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
20
24
|
const paths = [];
|
|
@@ -3,11 +3,13 @@ import { SortingOptions } from '../../../enums/SortingOptions';
|
|
|
3
3
|
import { OrganisationsSeoIndexabilityPolicy } from '../../../organisations/policies/OrganisationsSeoIndexabilityPolicy';
|
|
4
4
|
import { SingleValueSelectedForFilterRule } from '../../../common/rules/SingleValueSelectedForFilterRule';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../../common/rules/OnlyFiltersSelectedRule';
|
|
6
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
6
7
|
export declare class Continent extends OrganisationsSeoIndexabilityPolicy {
|
|
7
8
|
readonly name: string;
|
|
8
9
|
readonly description: string;
|
|
9
10
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
10
11
|
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
|
|
12
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
11
13
|
get filterCombination(): FilterCombinations;
|
|
12
14
|
protected generateUrls(): Promise<string[]>;
|
|
13
15
|
}
|
|
@@ -13,6 +13,10 @@ export class Continent extends OrganisationsSeoIndexabilityPolicy {
|
|
|
13
13
|
new SingleValueSelectedForFilterRule(FilterKey.CONTINENT),
|
|
14
14
|
new OnlyFiltersSelectedRule([FilterKey.CONTINENT])
|
|
15
15
|
];
|
|
16
|
+
constructor(dependencies) {
|
|
17
|
+
super(dependencies);
|
|
18
|
+
this.addIndexablePageNumberRule();
|
|
19
|
+
}
|
|
16
20
|
get filterCombination() {
|
|
17
21
|
return FilterCombinations.CONTINENT;
|
|
18
22
|
}
|
|
@@ -3,11 +3,13 @@ import { SortingOptions } from '../../../enums/SortingOptions';
|
|
|
3
3
|
import { OrganisationsSeoIndexabilityPolicy } from '../../../organisations/policies/OrganisationsSeoIndexabilityPolicy';
|
|
4
4
|
import { SingleValueSelectedForFilterRule } from '../../../common/rules/SingleValueSelectedForFilterRule';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../../common/rules/OnlyFiltersSelectedRule';
|
|
6
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
6
7
|
export declare class Country extends OrganisationsSeoIndexabilityPolicy {
|
|
7
8
|
readonly name: string;
|
|
8
9
|
readonly description: string;
|
|
9
10
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
10
11
|
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
|
|
12
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
11
13
|
get filterCombination(): FilterCombinations;
|
|
12
14
|
protected generateUrls(): Promise<string[]>;
|
|
13
15
|
}
|
|
@@ -10,6 +10,10 @@ export class Country extends OrganisationsSeoIndexabilityPolicy {
|
|
|
10
10
|
description = 'Manages indexing of country-specific pages, applying rules to index only countries with adequate search demand and relevant content availability.';
|
|
11
11
|
sortingOption = SortingOptions.OUR_PICKS;
|
|
12
12
|
rules = [new SingleValueSelectedForFilterRule(FilterKey.COUNTRY), new OnlyFiltersSelectedRule([FilterKey.COUNTRY])];
|
|
13
|
+
constructor(dependencies) {
|
|
14
|
+
super(dependencies);
|
|
15
|
+
this.addIndexablePageNumberRule();
|
|
16
|
+
}
|
|
13
17
|
get filterCombination() {
|
|
14
18
|
return FilterCombinations.COUNTRY;
|
|
15
19
|
}
|
|
@@ -5,11 +5,13 @@ import { SingleValueSelectedForFilterRule } from '../../../common/rules/SingleVa
|
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../../common/rules/OnlyFiltersSelectedRule';
|
|
6
6
|
import { OnlineAttendanceRule } from '../../../common/rules/OnlineAttendanceRule';
|
|
7
7
|
import { SearchVolumeCountriesAttendanceRule } from '../../../organisations/rules/SearchVolumeCountriesAttendanceRule';
|
|
8
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
8
9
|
export declare class CountryAttendance extends OrganisationsSeoIndexabilityPolicy {
|
|
9
10
|
readonly name: string;
|
|
10
11
|
readonly description: string;
|
|
11
12
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
12
13
|
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule | SearchVolumeCountriesAttendanceRule)[];
|
|
14
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
13
15
|
get filterCombination(): FilterCombinations;
|
|
14
16
|
protected generateUrls(): Promise<string[]>;
|
|
15
17
|
}
|
|
@@ -19,6 +19,10 @@ export class CountryAttendance extends OrganisationsSeoIndexabilityPolicy {
|
|
|
19
19
|
new SearchVolumeCountriesAttendanceRule(),
|
|
20
20
|
new OnlineAttendanceRule()
|
|
21
21
|
];
|
|
22
|
+
constructor(dependencies) {
|
|
23
|
+
super(dependencies);
|
|
24
|
+
this.addIndexablePageNumberRule();
|
|
25
|
+
}
|
|
22
26
|
get filterCombination() {
|
|
23
27
|
return FilterCombinations.COUNTRY_ATTENDANCE;
|
|
24
28
|
}
|
|
@@ -2,11 +2,13 @@ import { OrganisationsSeoIndexabilityPolicy } from '../../../organisations/polic
|
|
|
2
2
|
import { FilterCombinations } from '../../../enums/FilterCombinations';
|
|
3
3
|
import { SortingOptions } from '../../../enums/SortingOptions';
|
|
4
4
|
import { NoFiltersSelectedRule } from '../../../common/rules/NoFiltersSelectedRule';
|
|
5
|
+
import { IOrganisationsSeoDependencies } from '../../../organisations/types/IOrganisationsSeoDependencies';
|
|
5
6
|
export declare class Unfiltered extends OrganisationsSeoIndexabilityPolicy {
|
|
6
7
|
readonly name: string;
|
|
7
8
|
readonly description: string;
|
|
8
9
|
protected readonly sortingOption = SortingOptions.OUR_PICKS;
|
|
9
10
|
protected readonly rules: NoFiltersSelectedRule[];
|
|
11
|
+
constructor(dependencies: IOrganisationsSeoDependencies);
|
|
10
12
|
protected generateUrls(): Promise<string[]>;
|
|
11
13
|
get filterCombination(): FilterCombinations;
|
|
12
14
|
}
|
|
@@ -7,6 +7,10 @@ export class Unfiltered extends OrganisationsSeoIndexabilityPolicy {
|
|
|
7
7
|
description = 'Defines indexability rules for unfiltered pages, managing crawl budget by ensuring only high-value aggregate pages are included in the sitemap.';
|
|
8
8
|
sortingOption = SortingOptions.OUR_PICKS;
|
|
9
9
|
rules = [new NoFiltersSelectedRule()];
|
|
10
|
+
constructor(dependencies) {
|
|
11
|
+
super(dependencies);
|
|
12
|
+
this.addIndexablePageNumberRule();
|
|
13
|
+
}
|
|
10
14
|
generateUrls() {
|
|
11
15
|
return Promise.resolve([this.getPathWithSortingOption('')]);
|
|
12
16
|
}
|
|
@@ -15,6 +15,7 @@ export class RankedArea extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
15
15
|
constructor(dependencies) {
|
|
16
16
|
super(dependencies);
|
|
17
17
|
this.addRankedResultsCountRule();
|
|
18
|
+
this.addIndexablePageNumberRule();
|
|
18
19
|
}
|
|
19
20
|
async generateUrls() {
|
|
20
21
|
const areaFragments = AreaPresenter.getInstance().getFragments();
|
|
@@ -19,6 +19,7 @@ export class RankedAreaDiscipline extends RankedOrganisationsSeoIndexabilityPoli
|
|
|
19
19
|
constructor(dependencies) {
|
|
20
20
|
super(dependencies);
|
|
21
21
|
this.addRankedResultsCountRule();
|
|
22
|
+
this.addIndexablePageNumberRule();
|
|
22
23
|
}
|
|
23
24
|
get filterCombination() {
|
|
24
25
|
return FilterCombinations.RANKED_AREA_DISCIPLINE;
|
|
@@ -16,6 +16,7 @@ export class RankedAttendance extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
16
16
|
constructor(dependencies) {
|
|
17
17
|
super(dependencies);
|
|
18
18
|
this.addRankedResultsCountRule();
|
|
19
|
+
this.addIndexablePageNumberRule();
|
|
19
20
|
}
|
|
20
21
|
async generateUrls() {
|
|
21
22
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
@@ -18,6 +18,7 @@ export class RankedAttendanceDiscipline extends RankedOrganisationsSeoIndexabili
|
|
|
18
18
|
constructor(dependencies) {
|
|
19
19
|
super(dependencies);
|
|
20
20
|
this.addRankedResultsCountRule();
|
|
21
|
+
this.addIndexablePageNumberRule();
|
|
21
22
|
}
|
|
22
23
|
get filterCombination() {
|
|
23
24
|
return FilterCombinations.RANKED_ATTENDANCE_DISCIPLINE;
|
|
@@ -14,6 +14,7 @@ export class RankedContinent extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
14
14
|
constructor(dependencies) {
|
|
15
15
|
super(dependencies);
|
|
16
16
|
this.addRankedResultsCountRule();
|
|
17
|
+
this.addIndexablePageNumberRule();
|
|
17
18
|
}
|
|
18
19
|
async generateUrls() {
|
|
19
20
|
const continentFragments = ContinentPresenter.getInstance().getFragments();
|
|
@@ -20,6 +20,7 @@ export class RankedContinentAttendance extends RankedOrganisationsSeoIndexabilit
|
|
|
20
20
|
constructor(dependencies) {
|
|
21
21
|
super(dependencies);
|
|
22
22
|
this.addRankedResultsCountRule();
|
|
23
|
+
this.addIndexablePageNumberRule();
|
|
23
24
|
}
|
|
24
25
|
async generateUrls() {
|
|
25
26
|
const continentFragments = ContinentPresenter.getInstance().getFragments();
|
|
@@ -11,6 +11,7 @@ export class RankedCountry extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
11
11
|
constructor(dependencies) {
|
|
12
12
|
super(dependencies);
|
|
13
13
|
this.addRankedResultsCountRule();
|
|
14
|
+
this.addIndexablePageNumberRule();
|
|
14
15
|
}
|
|
15
16
|
async generateUrls() {
|
|
16
17
|
const countryFragments = CountryPresenter.getInstance().getFragments();
|
|
@@ -18,6 +18,7 @@ export class RankedCountryAttendance extends RankedOrganisationsSeoIndexabilityP
|
|
|
18
18
|
constructor(dependencies) {
|
|
19
19
|
super(dependencies);
|
|
20
20
|
this.addRankedResultsCountRule();
|
|
21
|
+
this.addIndexablePageNumberRule();
|
|
21
22
|
}
|
|
22
23
|
async generateUrls() {
|
|
23
24
|
const countryFragments = CountryPresenter.getInstance().getFragments();
|
|
@@ -16,6 +16,7 @@ export class RankedCountryDiscipline extends RankedOrganisationsSeoIndexabilityP
|
|
|
16
16
|
constructor(dependencies) {
|
|
17
17
|
super(dependencies);
|
|
18
18
|
this.addRankedResultsCountRule();
|
|
19
|
+
this.addIndexablePageNumberRule();
|
|
19
20
|
}
|
|
20
21
|
async generateUrls() {
|
|
21
22
|
const countryFragments = CountryPresenter.getInstance().getFragments();
|
|
@@ -14,6 +14,7 @@ export class RankedDiscipline extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
14
14
|
constructor(dependencies) {
|
|
15
15
|
super(dependencies);
|
|
16
16
|
this.addRankedResultsCountRule();
|
|
17
|
+
this.addIndexablePageNumberRule();
|
|
17
18
|
}
|
|
18
19
|
async generateUrls() {
|
|
19
20
|
const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
|
|
@@ -8,6 +8,7 @@ export class RankedUnfiltered extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
8
8
|
constructor(dependencies) {
|
|
9
9
|
super(dependencies);
|
|
10
10
|
this.addRankedResultsCountRule();
|
|
11
|
+
this.addIndexablePageNumberRule();
|
|
11
12
|
}
|
|
12
13
|
async generateUrls() {
|
|
13
14
|
const filterKeyValues = new Map([]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IProgrammeSearchDependencies } from '../types/IProgrammeSearchDependencies';
|
|
2
2
|
import { BaseProgrammeRule } from '../BaseProgrammeRule';
|
|
3
3
|
export declare class IndexablePageNumberRule extends BaseProgrammeRule {
|
|
4
|
-
private
|
|
4
|
+
private commonRule;
|
|
5
5
|
forSearch(dependencies: IProgrammeSearchDependencies): Promise<boolean>;
|
|
6
6
|
forSitemapGenerator(): Promise<boolean>;
|
|
7
7
|
getName(): string;
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { BaseProgrammeRule } from '../BaseProgrammeRule';
|
|
2
|
+
import { IndexablePageNumberRule as CommonIndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
2
3
|
export class IndexablePageNumberRule extends BaseProgrammeRule {
|
|
3
|
-
|
|
4
|
+
commonRule = new CommonIndexablePageNumberRule();
|
|
4
5
|
forSearch(dependencies) {
|
|
5
|
-
|
|
6
|
-
const isPageNumberIndexable = applicationState.getPageNumber() <= this.minimumPageNumber;
|
|
7
|
-
return Promise.resolve(isPageNumberIndexable);
|
|
6
|
+
return this.commonRule.forSearch(dependencies);
|
|
8
7
|
}
|
|
9
8
|
forSitemapGenerator() {
|
|
10
|
-
return
|
|
9
|
+
return this.commonRule.forSitemapGenerator();
|
|
11
10
|
}
|
|
12
11
|
getName() {
|
|
13
|
-
return
|
|
12
|
+
return this.commonRule.getName();
|
|
14
13
|
}
|
|
15
14
|
getDescription() {
|
|
16
|
-
return
|
|
15
|
+
return this.commonRule.getDescription();
|
|
17
16
|
}
|
|
18
17
|
}
|
|
@@ -4,11 +4,12 @@ import { SearchVolumeAreasRule } from '../rules/SearchVolumeAreasRule';
|
|
|
4
4
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
5
5
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
6
6
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
7
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
7
8
|
import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
|
|
8
9
|
export declare class Area extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
|
|
9
10
|
readonly name: string;
|
|
10
11
|
readonly description: string;
|
|
11
|
-
protected readonly rules: (ExceptAustraliaAreasRule | SearchVolumeAreasRule | SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
|
|
12
|
+
protected readonly rules: (ExceptAustraliaAreasRule | SearchVolumeAreasRule | SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexablePageNumberRule)[];
|
|
12
13
|
get filterCombination(): FilterCombinations;
|
|
13
14
|
protected generateUrls(): Promise<string[]>;
|
|
14
15
|
}
|
|
@@ -6,6 +6,7 @@ import { AreaPresenter } from '../../presenters/AreaPresenter';
|
|
|
6
6
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
7
7
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
8
8
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
9
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
9
10
|
export class Area extends BaseSeoIndexabilityPolicy {
|
|
10
11
|
name = 'Area Policy';
|
|
11
12
|
description = 'Controls indexing of pages filtered by geographic areas, ensuring only SEO-valuable regional content with sufficient search volume is indexed while respecting country associations.';
|
|
@@ -14,7 +15,8 @@ export class Area extends BaseSeoIndexabilityPolicy {
|
|
|
14
15
|
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
15
16
|
new OnlyFiltersSelectedRule([FilterKey.AREA, FilterKey.COUNTRY]),
|
|
16
17
|
new ExceptAustraliaAreasRule(),
|
|
17
|
-
new SearchVolumeAreasRule()
|
|
18
|
+
new SearchVolumeAreasRule(),
|
|
19
|
+
new IndexablePageNumberRule()
|
|
18
20
|
];
|
|
19
21
|
get filterCombination() {
|
|
20
22
|
return FilterCombinations.AREA;
|
|
@@ -3,11 +3,13 @@ import { SearchVolumeCountriesRule } from '../rules/SearchVolumeCountriesRule';
|
|
|
3
3
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
4
4
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
6
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
6
7
|
import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
|
|
7
8
|
export declare class Country extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
|
|
8
9
|
readonly name: string;
|
|
9
10
|
readonly description: string;
|
|
10
|
-
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | SearchVolumeCountriesRule)[];
|
|
11
|
+
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexablePageNumberRule | SearchVolumeCountriesRule)[];
|
|
12
|
+
constructor(dependencies: IScholarshipSeoDependencies);
|
|
11
13
|
get filterCombination(): FilterCombinations;
|
|
12
14
|
protected generateUrls(): Promise<string[]>;
|
|
13
15
|
}
|
|
@@ -5,14 +5,19 @@ import { CountryPresenter } from '../../presenters/CountryPresenter';
|
|
|
5
5
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
6
6
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
7
7
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
8
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
8
9
|
export class Country extends BaseSeoIndexabilityPolicy {
|
|
9
10
|
name = 'Country Policy';
|
|
10
11
|
description = 'Manages indexing of country-specific pages, applying rules to index only countries with adequate search demand and relevant content availability.';
|
|
11
12
|
rules = [
|
|
12
13
|
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
13
14
|
new OnlyFiltersSelectedRule([FilterKey.COUNTRY]),
|
|
14
|
-
new SearchVolumeCountriesRule()
|
|
15
|
+
new SearchVolumeCountriesRule(),
|
|
16
|
+
new IndexablePageNumberRule()
|
|
15
17
|
];
|
|
18
|
+
constructor(dependencies) {
|
|
19
|
+
super(dependencies);
|
|
20
|
+
}
|
|
16
21
|
get filterCombination() {
|
|
17
22
|
return FilterCombinations.AREA;
|
|
18
23
|
}
|
|
@@ -3,11 +3,13 @@ import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
|
3
3
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
4
4
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
6
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
6
7
|
import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
|
|
7
8
|
export declare class Discipline extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
|
|
8
9
|
readonly name: string;
|
|
9
10
|
readonly description: string;
|
|
10
|
-
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | SearchVolumeDisciplinesRule)[];
|
|
11
|
+
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexablePageNumberRule | SearchVolumeDisciplinesRule)[];
|
|
12
|
+
constructor(dependencies: IScholarshipSeoDependencies);
|
|
11
13
|
get filterCombination(): FilterCombinations;
|
|
12
14
|
protected generateUrls(): Promise<string[]>;
|
|
13
15
|
}
|
|
@@ -5,14 +5,19 @@ import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
|
5
5
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
6
6
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
7
7
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
8
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
8
9
|
export class Discipline extends BaseSeoIndexabilityPolicy {
|
|
9
10
|
name = 'Discipline Country Policy';
|
|
10
11
|
description = 'Governs indexability for pages at the intersection of academic disciplines and countries, optimizing SEO for field-specific content within national contexts.';
|
|
11
12
|
rules = [
|
|
12
13
|
new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
|
|
13
14
|
new OnlyFiltersSelectedRule([FilterKey.DISCIPLINES]),
|
|
14
|
-
new SearchVolumeDisciplinesRule()
|
|
15
|
+
new SearchVolumeDisciplinesRule(),
|
|
16
|
+
new IndexablePageNumberRule()
|
|
15
17
|
];
|
|
18
|
+
constructor(dependencies) {
|
|
19
|
+
super(dependencies);
|
|
20
|
+
}
|
|
16
21
|
get filterCombination() {
|
|
17
22
|
return FilterCombinations.DISCIPLINE;
|
|
18
23
|
}
|
|
@@ -3,11 +3,13 @@ import { SearchVolumeCountriesDisciplinesRule } from '../rules/SearchVolumeCount
|
|
|
3
3
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
4
4
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
5
5
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
6
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
6
7
|
import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
|
|
7
8
|
export declare class DisciplineCountry extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
|
|
8
9
|
readonly name: string;
|
|
9
10
|
readonly description: string;
|
|
10
|
-
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | SearchVolumeCountriesDisciplinesRule)[];
|
|
11
|
+
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexablePageNumberRule | SearchVolumeCountriesDisciplinesRule)[];
|
|
12
|
+
constructor(dependencies: IScholarshipSeoDependencies);
|
|
11
13
|
get filterCombination(): FilterCombinations;
|
|
12
14
|
protected generateUrls(): Promise<string[]>;
|
|
13
15
|
}
|
|
@@ -6,6 +6,7 @@ import { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
|
|
|
6
6
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
7
7
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
8
8
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
9
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
9
10
|
export class DisciplineCountry extends BaseSeoIndexabilityPolicy {
|
|
10
11
|
name = 'Discipline Policy';
|
|
11
12
|
description = 'Determines which discipline-filtered pages qualify for indexing based on search volume thresholds and content availability within specific academic fields.';
|
|
@@ -13,8 +14,12 @@ export class DisciplineCountry extends BaseSeoIndexabilityPolicy {
|
|
|
13
14
|
new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
|
|
14
15
|
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
15
16
|
new OnlyFiltersSelectedRule([FilterKey.DISCIPLINES, FilterKey.COUNTRY]),
|
|
16
|
-
new SearchVolumeCountriesDisciplinesRule()
|
|
17
|
+
new SearchVolumeCountriesDisciplinesRule(),
|
|
18
|
+
new IndexablePageNumberRule()
|
|
17
19
|
];
|
|
20
|
+
constructor(dependencies) {
|
|
21
|
+
super(dependencies);
|
|
22
|
+
}
|
|
18
23
|
get filterCombination() {
|
|
19
24
|
return FilterCombinations.DISCIPLINE_COUNTRY;
|
|
20
25
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
2
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
3
3
|
import { NoFiltersSelectedRule } from '../../common/rules/NoFiltersSelectedRule';
|
|
4
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
4
5
|
import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
|
|
5
6
|
export declare class Unfiltered extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
|
|
6
7
|
readonly name: string;
|
|
7
8
|
readonly description: string;
|
|
8
|
-
protected readonly rules: NoFiltersSelectedRule[];
|
|
9
|
+
protected readonly rules: (IndexablePageNumberRule | NoFiltersSelectedRule)[];
|
|
10
|
+
constructor(dependencies: IScholarshipSeoDependencies);
|
|
9
11
|
protected generateUrls(): Promise<string[]>;
|
|
10
12
|
get filterCombination(): FilterCombinations;
|
|
11
13
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
2
2
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
3
3
|
import { NoFiltersSelectedRule } from '../../common/rules/NoFiltersSelectedRule';
|
|
4
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
4
5
|
export class Unfiltered extends BaseSeoIndexabilityPolicy {
|
|
5
6
|
name = 'Unfiltered Policy';
|
|
6
7
|
description = 'Defines indexability rules for unfiltered pages, managing crawl budget by ensuring only high-value aggregate pages are included in the sitemap.';
|
|
7
|
-
rules = [
|
|
8
|
+
rules = [
|
|
9
|
+
new NoFiltersSelectedRule(),
|
|
10
|
+
new IndexablePageNumberRule()
|
|
11
|
+
];
|
|
12
|
+
constructor(dependencies) {
|
|
13
|
+
super(dependencies);
|
|
14
|
+
}
|
|
8
15
|
generateUrls() {
|
|
9
16
|
return Promise.resolve(['']);
|
|
10
17
|
}
|
|
@@ -2,11 +2,13 @@ import { FilterCombinations } from '../../enums/FilterCombinations';
|
|
|
2
2
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
3
3
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
4
4
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
5
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
5
6
|
import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
|
|
6
7
|
export declare class UniversityCountry extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
|
|
7
8
|
readonly name: string;
|
|
8
9
|
readonly description: string;
|
|
9
|
-
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
|
|
10
|
+
protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexablePageNumberRule)[];
|
|
11
|
+
constructor(dependencies: IScholarshipSeoDependencies);
|
|
10
12
|
get filterCombination(): FilterCombinations;
|
|
11
13
|
protected generateUrls(): Promise<string[]>;
|
|
12
14
|
}
|
|
@@ -4,14 +4,19 @@ import { CountryPresenter } from '../../presenters/CountryPresenter';
|
|
|
4
4
|
import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
|
|
5
5
|
import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
|
|
6
6
|
import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
|
|
7
|
+
import { IndexablePageNumberRule } from '../../common/rules/IndexablePageNumberRule';
|
|
7
8
|
export class UniversityCountry extends BaseSeoIndexabilityPolicy {
|
|
8
9
|
name = 'University Country Policy';
|
|
9
10
|
description = 'Regulates indexing for pages filtered by both university and country, prioritizing institution-specific content within national boundaries that meets SEO criteria.';
|
|
10
11
|
rules = [
|
|
11
12
|
new SingleValueSelectedForFilterRule(FilterKey.ORGANISATIONS),
|
|
12
13
|
new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
|
|
13
|
-
new OnlyFiltersSelectedRule([FilterKey.ORGANISATIONS, FilterKey.COUNTRY])
|
|
14
|
+
new OnlyFiltersSelectedRule([FilterKey.ORGANISATIONS, FilterKey.COUNTRY]),
|
|
15
|
+
new IndexablePageNumberRule()
|
|
14
16
|
];
|
|
17
|
+
constructor(dependencies) {
|
|
18
|
+
super(dependencies);
|
|
19
|
+
}
|
|
15
20
|
get filterCombination() {
|
|
16
21
|
return FilterCombinations.UNIVERSITY_COUNTRY;
|
|
17
22
|
}
|