Aplikacije napravljene u Angularu u startu nisu SEO optimizirane što ne znači da to tako mora i ostati. Koristeći ng-toolkit Universal moguće je kroz nekoliko koraka omogućiti da Angular aplikacija postane SEO-Friendly.
Angular CLI
Prije svega, moram provjeriti koju verziju Angular CLI-a imam instaliranu. U ovom slučaju to je verzija 6.0.8
|
1 |
$ ng -v |
Kreiranje Angular projekta
Novi projekt kreiram i pokrećem sljedećim naredbama
|
1 2 3 |
$ ng new AngularSeo --routing $ cd AngularSeo $ ng serve -o |
U web pregledniku mogu vidjeti kako projekt trenutno izgleda. Na početnoj se stranici nalazi nekoliko redova teksta.
Međutim, ako kliknem na desnu tipku miša i odaberem ‘View page source‘ mogu vidjeti sljedeće tj. niti jedan od ranije spomenutih redova teksta ovdje nije vidljiv, a trebao bi biti ako želim imati SEO optimizaciju.
Dodavanje nove komponente
Novu komponentu dodajem sljedećom naredbom
|
1 |
$ ng g c nova-komponenta |
Nakon što je komponenta kreirana
trebam dodati i pripadajuću rutu kako bi se nova komponenta prikazala. To ću napraviti unutar datoteke app-routing.module.ts.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { NovaKomponentaComponent } from './nova-komponenta/nova-komponenta.component'; const routes: Routes = [ { path: 'nova-komponenta', component: NovaKomponentaComponent } ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { } |
Na početnoj stranici app.component.html sada mogu navesti poveznicu prema novoj komponenti.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!--The content below is only a placeholder and can be replaced.--> <div style="text-align:center"> <h1> Welcome to {{ title }}! </h1> <img width="300" alt="Angular Logo" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg=="> </div> <h2>Here are some links to help you start: </h2> <ul> <li> <h2><a routerLink="nova-komponenta">Nova komponenta</a></h2> </li> <li> <h2><a target="_blank" rel="noopener" href="https://angular.io/tutorial">Tour of Heroes</a></h2> </li> <li> <h2><a target="_blank" rel="noopener" href="https://github.com/angular/angular-cli/wiki">CLI Documentation</a></h2> </li> <li> <h2><a target="_blank" rel="noopener" href="https://blog.angular.io/">Angular blog</a></h2> </li> </ul> <router-outlet></router-outlet> |
Sve to na kraju izgleda ovako
Međutim, koliko god ja sadržaja dodao tražilice ga neće vidjeti što znači da ga neće moći indeksirati što opet znači da moja Angular aplikacija neće biti SEO optimizirana.
SEO optimizacija
Angular CLI će i ovdje odraditi veliki dio posla umjesto mene.
Pokrećem sljedeću naredbu i nadam se da neće biti grešaka.
|
1 |
$ ng add @ng-toolkit/universal |
Aplikaciju ću sada pokrenuti sljedećom naredbom
|
1 2 |
$ npm run build:prod $ npm run server |
i odmah mogu vidjeti da je od sada moja Angular aplikacija SEO optimizirana.
Moguće je primijetiti da početna i nova stranica imaju jednak naslov
|
1 |
<title>AngularSeo</title> |
Za novu komponentu mogu napraviti poseban naslov na sljedeći način.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import { Component, OnInit } from '@angular/core'; import { Title } from '@angular/platform-browser'; @Component({ selector: 'app-nova-komponenta', templateUrl: './nova-komponenta.component.html', styleUrls: ['./nova-komponenta.component.css'] }) export class NovaKomponentaComponent implements OnInit { constructor(private _title: Title) { } ngOnInit() { this._title.setTitle( 'Ovo je novi naslov!' ); } } |
Zaključak
SEO optimizacija je daleko kompleksnije područje da bi se gore navedeni primjer mogao smatrati cjelovitim rješenjem, ali i ovo je dobar početak za svakog Angular developera.
Struktura projekta:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
{ "name": "angular-seo", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", "build:server:prod": "ng run AngularSeo:server && webpack --config webpack.server.config.js --progress --colors", "build:browser:prod": "ng build --prod", "build:prod": "npm run build:server:prod && npm run build:browser:prod", "server": "node local.js" }, "private": true, "dependencies": { "@angular/animations": "^6.0.3", "@angular/common": "^6.0.3", "@angular/compiler": "^6.0.3", "@angular/core": "^6.0.3", "@angular/forms": "^6.0.3", "@angular/http": "^6.0.3", "@angular/platform-browser": "^6.0.0", "@angular/platform-browser-dynamic": "^6.0.3", "@angular/router": "^6.0.3", "@ng-toolkit/universal": "^1.1.21", "core-js": "^2.5.4", "rxjs": "^6.0.0", "zone.js": "^0.8.26", "@angular/platform-server": "^6.0.0", "@nguniversal/module-map-ngfactory-loader": "^6.0.0", "webpack-cli": "^2.1.4", "ts-loader": "4.2.0", "@nguniversal/express-engine": "^6.0.0", "cors": "~2.8.4" }, "devDependencies": { "@angular/compiler-cli": "^6.0.3", "@angular-devkit/build-angular": "~0.6.8", "typescript": "~2.7.2", "@angular/cli": "~6.0.8", "@angular/language-service": "^6.0.3", "@types/jasmine": "~2.8.6", "@types/jasminewd2": "~2.0.3", "@types/node": "~8.9.4", "codelyzer": "~4.2.1", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", "karma": "~1.7.1", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "~2.0.0", "karma-jasmine": "~1.1.1", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.3.0", "ts-node": "~5.0.1", "tslint": "~5.9.1" } } |








