{"id":473,"date":"2015-09-10T14:17:01","date_gmt":"2015-09-10T12:17:01","guid":{"rendered":"http:\/\/blog.thecodecampus.de\/?p=473"},"modified":"2023-12-20T20:31:31","modified_gmt":"2023-12-20T19:31:31","slug":"seo-angularjs-remove-hashbang-from-urls-seosafe","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/","title":{"rendered":"[SEO] AngularJS remove Hashbang from URL&#8217;s &#8211; seosafe"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">By default AngularJS projects use the hashbang syntax for urls to handle navigation without forcing the client to reload the whole application on every state change. Since the (HTML5) History API is available in all modern browsers the usage of the hashbang is not really required anymore. Furthermore urls look way cleaner without the hashbang. The removal is pretty simple, but even slight errors could either cause legacy browsers to have problems with your site or even worse &#8211; google may remove your rankings in the search engine results since your single page application is not crawlable anymore. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">This blog post\u00a0will provide you with the proper way to rearrange your urls in order to remove the hashbang from your urls. We\u2019ll assume that you\u2019re running the <\/span><b>Angular UI Router<\/b><span style=\"font-weight: 400;\"> and have access to the server component which is necessary in order to redirect all requests to your single page application entry point. If you are rearranging your url structure, consider implementing https since it will affect your ranking and you are going to touch your urls anyway.<\/span><\/p>\n<h1><\/h1>\n<h1><\/h1>\n<h1>1. Set-up your angularjs application for\u00a0seo friendly urls<\/h1>\n<h2>1.1 ui-router-conifg<\/h2>\n<p>The configuration will be set in your\u00a0modules config part. Just add the following line to enable html5 mode.<\/p>\n<pre class=\"lang:default decode:true\">module.config(function ($locationProvider) {\r\n    $locationProvider.html5Mode(true)\r\n    $locationProvider.hashPrefix('!');\r\n});<\/pre>\n<p>Apart from some small trivia your application should now be able to run in html5 mode &#8211; urls should look like <em>domain.tld\/route\/route\/<\/em><\/p>\n<p>We need to add the hashPrefix in order to redirect old urls to the new schema, e.g. domain.tld\/#!\/route to domain.tld\/route<\/p>\n<p>Things that wont work right now:<\/p>\n<ul>\n<li>deep linking into your application<\/li>\n<li>reload on pages other than the start view<\/li>\n<li>support for some legacy and mobile browsers<\/li>\n<li>redirect old links for users and <strong>for google<\/strong><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>1.2 set base url<\/h2>\n<p>Now we have to set the base url in your <em>index.html<\/em>\u00a0file. This will enable the loading of resources inside of your application. Otherwise you will experience an error if you\u00a0are in the state \/foo\/bar of your application and\u00a0\u00a0call a directive that renders the\u00a0following image tag:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;img src=\"assets\/images\/imageFromDirektive.png\" alt=\"foo\"&gt;\r\n\r\n<\/pre>\n<p>and your files look like this:<\/p>\n<pre class=\"lang:default decode:true\">.\/assets\/\r\n.\/assets\/images\/ \r\n.\/index.html \r\n.\/app.js<\/pre>\n<p>your browser will try to load the file with the wrong path <strong>&#8220;foo\/bar\/assets\/images\/imageFromDirektive.png&#8221;<\/strong>. The base path tag will tell the browser not to use the current file path but to start on the root level of your domain which will result in <strong>&#8220;assets\/images\/imageFromDirektive.png&#8221;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Since Google doesn&#8217;t which url schema should be preferred it is absolutely necessary to set canonical tags. The given url will be indexed while other urls linking to the same content wont appear in googles search index. since<\/p>\n<p>&nbsp;<\/p>\n<h2>1.3 directive for canonical-tags<\/h2>\n<p>Since not all browsers are\u00a0capable of handling the HTML5\u00a0history\u00a0API\u00a0it is\u00a0absolutely necessary to keep the urls\u00a0with hashbang accessible for users with legacy or mobile browsers. Google doesn&#8217;t know which url structure should be preferred. That&#8217;s why we need to provide some information with canonical-tags. \u00a0This can be achieved pretty easily. It gets a little bit more complicated when you have url parameters but this directive will help you to set up your canonical-tags correctly.\u00a0<strong><a href=\"https:\/\/github.com\/w11k\/w11k-angular-seo-header\" target=\"_blank\" rel=\"noopener noreferrer\">w11k.angular-seo-header<\/a><\/strong>.<\/p>\n<p>Furthermore you can use the directive to output\u00a0url\u00a0parameters\u00a0directly into your html title-tag, meta description or keywords. Since you can also enter a function it is no problem to map url parameter to readable text or other informations.<\/p>\n<p>install <strong>w11k.angular-seo-header<\/strong> using <strong>bower<\/strong><\/p>\n<pre class=\"lang:default decode:true\">bower install --save w11k.angular-seo-header\r\n<\/pre>\n<p>then add it to your module<\/p>\n<pre class=\"lang:default decode:true \"> angular.module('myModule', ['w11k.angular-seo-header',]);\r\n<\/pre>\n<p>finally pass the head object to your view data:<\/p>\n<pre><code>var module = angular.module('myModule', ['ui.router', 'w11k.angular-seo-header']);\r\n\r\nmodule.config(function ($stateProvider) {\r\n    $stateProvider\r\n        .state('home', {\r\n            url: '\/home',\r\n            data: {\r\n                head: {\r\n                    title: 'Page title for this View',\r\n                    keywords: [\"Array\", \"of\", 'Keywords'],\r\n                    description: \"your meta description\",\r\n                    robots: \"index,follow\",\r\n                    canonical: 'https:\/\/www.mySite.tld\/home',\r\n                }\r\n            },\r\n        });\r\n});<\/code><\/pre>\n<p>if you have any parameters set you can access them for each tag with an extend function. e.g. for canonical and title tag with 1 parameter:<\/p>\n<pre><code>module.config(function($stateProvider) {\r\n$stateProvider\r\n    .state('route', {\r\n      url: '\/route\/:param1',\r\n      data: {\r\n          head: {\r\n              title: 'My View Page-Title',\r\n              keywords: ['keyword 1', 'keyword 2'],\r\n              description: 'Meta Description for View',\r\n              robots: 'index,follow',\r\n              canonical: 'https:\/\/www.domain.tld\/#!\/route\/',\r\n              canonicalExtend: function (canonicalStr, toParams) {\r\n                  return canonicalStr+toParams.param1;\r\n              },\r\n              titleExtend: function(titleStr, toParams){\r\n              return titleStr + capitalizeFirstLetter(toParams.param1);\r\n              }\r\n          }\r\n      },<\/code><\/pre>\n<h1>2. server side configuration<\/h1>\n<p>Since your app can&#8217;t\u00a0handle deep-linking right now we need to adjust the server config to direct all incoming requests directly to your index.html.<\/p>\n<p><strong>for apache:<\/strong><\/p>\n<pre class=\"lang:apache decode:true\">&lt;VirtualHost *:80&gt;\r\n\u00a0\u00a0\u00a0ServerName my-app\r\n\r\n\u00a0\u00a0\u00a0DocumentRoot \/path\/to\/app\r\n\r\n\u00a0\u00a0\u00a0&lt;Directory \/path\/to\/app&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RewriteEngine on\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# Don't rewrite files or directories\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RewriteCond %{REQUEST_FILENAME} -f [OR]\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RewriteCond %{REQUEST_FILENAME} -d\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RewriteRule ^ - [L]\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# Rewrite everything else to index.html to allow html5 state links\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0RewriteRule ^ index.html [L]\r\n\u00a0\u00a0\u00a0&lt;\/Directory&gt;\r\n&lt;\/VirtualHost&gt;<\/pre>\n<p>for others servers you find a sample config here: <a href=\"https:\/\/github.com\/angular-ui\/ui-router\/wiki\/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode\" target=\"_blank\" rel=\"noopener noreferrer\">ui-router-wiki<\/a><\/p>\n<h1>3. why canonical and why you really should NOT use 301<\/h1>\n<p>It&#8217;d be possible to redirect all hashbang links to the new html5 structure, <strong>but\u00a0<\/strong>what about our old friend\u00a0internet explorer 9?\u00a0Angulars html5mode doesnt work with it and we need to keep the hashbang structure alive<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>You can see running example at <a href=\"https:\/\/www.thecodecampus.de\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.thecodecampus.de<\/a>.\u00a0<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By default AngularJS projects use the hashbang syntax for urls to handle navigation without forcing the client to reload the whole application on every state change. Since the (HTML5) History API is available in all modern browsers the usage of the hashbang is not really required anymore. Furthermore urls look way cleaner without the hashbang. [&#8230;]<br \/><a class=\"meta-big\" href=\"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/\"> READ MORE<\/a><\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,2],"tags":[62,61,84],"class_list":["post-473","post","type-post","status-publish","format-standard","hentry","category-angularjs","category-javascript","tag-angularjs","tag-javascript","tag-seo"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[SEO] AngularJS remove Hashbang from URL&#039;s - seosafe - Web Development Blog<\/title>\n<meta name=\"description\" content=\"SEO perfection for AngularJS! Remove hashbangs from URLs for ultimate SEO safety. Boost visibility, enhance rankings, and optimize with ease.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[SEO] AngularJS remove Hashbang from URL&#039;s - seosafe - Web Development Blog\" \/>\n<meta property=\"og:description\" content=\"SEO perfection for AngularJS! Remove hashbangs from URLs for ultimate SEO safety. Boost visibility, enhance rankings, and optimize with ease.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-10T12:17:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-20T19:31:31+00:00\" \/>\n<meta name=\"author\" content=\"theCodeCampus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"theCodeCampus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/\"},\"author\":{\"name\":\"theCodeCampus\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/276bbda2f8da73154f22fb652201cfbc\"},\"headline\":\"[SEO] AngularJS remove Hashbang from URL&#8217;s &#8211; seosafe\",\"datePublished\":\"2015-09-10T12:17:01+00:00\",\"dateModified\":\"2023-12-20T19:31:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/\"},\"wordCount\":729,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"keywords\":[\"AngularJS\",\"JavaScript\",\"Seo\"],\"articleSection\":[\"AngularJS 1\",\"JavaScript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/\",\"name\":\"[SEO] AngularJS remove Hashbang from URL's - seosafe - Web Development Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"datePublished\":\"2015-09-10T12:17:01+00:00\",\"dateModified\":\"2023-12-20T19:31:31+00:00\",\"description\":\"SEO perfection for AngularJS! Remove hashbangs from URLs for ultimate SEO safety. Boost visibility, enhance rankings, and optimize with ease.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/seo-angularjs-remove-hashbang-from-urls-seosafe\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[SEO] AngularJS remove Hashbang from URL&#8217;s &#8211; seosafe\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/276bbda2f8da73154f22fb652201cfbc\",\"name\":\"theCodeCampus\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg\",\"caption\":\"theCodeCampus\"},\"description\":\"Our knowledge is not simply gained through reading - it is trained, tested and constantly being expanded. Because first and foremost, we are all developers at W11K. The know-how that we acquire here as developers, consultants and information architects flows immediately into our training courses and articles for theCodeCampus.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/showcase\\\/thecodecampus\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[SEO] AngularJS remove Hashbang from URL's - seosafe - Web Development Blog","description":"SEO perfection for AngularJS! Remove hashbangs from URLs for ultimate SEO safety. Boost visibility, enhance rankings, and optimize with ease.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/","og_locale":"en_US","og_type":"article","og_title":"[SEO] AngularJS remove Hashbang from URL's - seosafe - Web Development Blog","og_description":"SEO perfection for AngularJS! Remove hashbangs from URLs for ultimate SEO safety. Boost visibility, enhance rankings, and optimize with ease.","og_url":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2015-09-10T12:17:01+00:00","article_modified_time":"2023-12-20T19:31:31+00:00","author":"theCodeCampus","twitter_card":"summary_large_image","twitter_misc":{"Written by":"theCodeCampus","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/"},"author":{"name":"theCodeCampus","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/276bbda2f8da73154f22fb652201cfbc"},"headline":"[SEO] AngularJS remove Hashbang from URL&#8217;s &#8211; seosafe","datePublished":"2015-09-10T12:17:01+00:00","dateModified":"2023-12-20T19:31:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/"},"wordCount":729,"commentCount":3,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"keywords":["AngularJS","JavaScript","Seo"],"articleSection":["AngularJS 1","JavaScript"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/","url":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/","name":"[SEO] AngularJS remove Hashbang from URL's - seosafe - Web Development Blog","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"datePublished":"2015-09-10T12:17:01+00:00","dateModified":"2023-12-20T19:31:31+00:00","description":"SEO perfection for AngularJS! Remove hashbangs from URLs for ultimate SEO safety. Boost visibility, enhance rankings, and optimize with ease.","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/seo-angularjs-remove-hashbang-from-urls-seosafe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"[SEO] AngularJS remove Hashbang from URL&#8217;s &#8211; seosafe"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/276bbda2f8da73154f22fb652201cfbc","name":"theCodeCampus","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch-96x96.jpg","caption":"theCodeCampus"},"description":"Our knowledge is not simply gained through reading - it is trained, tested and constantly being expanded. Because first and foremost, we are all developers at W11K. The know-how that we acquire here as developers, consultants and information architects flows immediately into our training courses and articles for theCodeCampus.","sameAs":["https:\/\/www.linkedin.com\/showcase\/thecodecampus\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/473","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=473"}],"version-history":[{"count":16,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/473\/revisions"}],"predecessor-version":[{"id":2196,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/473\/revisions\/2196"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}