Blog Feed Tue, 18 Dec 2018 13:08:30 +0200 <![CDATA[5 Technical Errors That Affect Google Rankings]]> This article will consider 5 technical aspects that affect websites ranking in Google. When these five problematic areas are brought to an ideal state, the website will get a better chance to be better ranked in organic SERP (search results page) and thereby will be better than its competitors.   1.     Website load speed Website load speed is among major factors of websites ranking in Google today. No one likes, when having used the search and gone to the website of interest, it starts to load slowly. As a result a wish to close it without waiting for the page full load appears. There are following types of a website load: — good speed – faster than 1 second; — average speed — 2 seconds; — slow speed — more than 3 seconds. The load speed may be checked with the service There is also a special service of Google: Having entered the website name to a string of checking and pressed “check”, you are offered with information like: which scripts affect the load; which images should be optimized; if there are more ways to increase the load speed, etc. One more point that affects ranking slightly is the server location. If you want to promote the website in the USA region, its server should be located in that country. It is also necessary for the server to have a minimal response time and be always available. Conclusions: a slow website load affects the website search promotion in a negative way. 2.     Mobile friendly From April 21, 2015 Google search system started to appreciate websites displayed properly on mobile devices.   It is important for two reasons: - better conversion; - better ranking. When coming to your website from mobile search results, a visitor may find the information he/she needs and satisfy his/her needs. For example: - to read an article; - to order a service/product; - to subscribe to a newsletter; - just to find out the phone number or to call right away. That’s why the factor of being Mobile friendly became very important for websites promotion in 2015. What is the way there to check and make a website displayed properly on all types of devices? Services for checking: If the website is poorly displayed on mobile devices, it should be made properly displayed in all major formats. An example of a website optimized: Conclusions: while the share of visits from mobile devices channel is growing (according to data of various services this share in the United States has already reached 60%), the website should be properly displayed on mobile devices to be ahead of its competitors. 3.     Duplicates of Meta tags, empty Meta tags It is possible to learn whether the website contains these errors by using in the appropriate section of Google Search Console.   Google Search Console “Title” tag is one of the most important factors of rankings and that’s why each page should have its unique title. If several pages have one and the same title, search systems won’t be able to define the page to rank in the search results and, as a result, all those pages having the same titles won’t be ranked properly. If the tag “Title” is empty, a search system won’t be able to rank it at all. “Meta description” also plays a significant role. Each description of a page should be made unique, as “Meta description” is shown in the search results as well and describes what the page is about. More attractive it is - more visitors from the search the website will get. If the tag “Meta description” is empty, the search system will pull out bits of text from the page on its own and form the description.  After such a self-generation not quite appropriate text may be chosen. 4.     404, 503, 500 errors. 301 redirect It makes it possible to learn if the website contains such codes of errors as 404, 500 and 503 using the program “Netpeak Spider” and “Search Console”. All these errors should be fixed as they affect the website indexing and its ranking in the search results much. “404 error” informs that this page doesn’t exist or has been deleted. This page will be kicked out of index by the search system robot. A large number of such errors will scatter the static weight of the website, which will affect its general search engine rankings. “404 errors” should be fixed with “301 redirect”, which means that from the deleted page (to which links from other pages or even websites lead) a redirect to a new page should be placed, thus the reference weight will be passed to a new page, and the search robot will not stumble over “404 error”. “500 error” is Internal Server Error, it occurs if there are errors in the file “.htacces”. “503 error” occurs if there are issues with the server on which the website is. For example, if the page has been temporarily unavailable and that was a moment when the search system robot was crawling it (according to Search Console). It happens that such errors occur when there is a server heavy load, and the website cannot be opened. If this error takes place for a long period of time, the page may drop out of the search engine index. To solve these issues the support of a hosting company should be contacted to fix them. But it is necessary to choose a good hoster having a minimum ping and a high incessancy initially. 5.     Robots.txt, sitemap.xml The file “robots.txt” provides search robots crawling Internet with important information. Before they go through the pages of your website, search engine robots check this file.   That’s why it is important to write rules of the website indexing in this file. But this file and its rules are only recommendations for the robot and there are no guarantees that the closed pages will not be indexed. Still this file should be configured as it is one of the foundations of the internal website optimization. It is important to configure it properly for pages and sections needed to be available for indexing by search engines and unwanted ones - closed. To check correctness of the file “robots.txt” a tool of checking from Google Search Console may be used: “Sitemap.xml” file presence on the website has a positive impact on the website indexing (if the sitemap is updated regularly when new pages are added to the website) and accelerates its indexing if the website has a huge number of pages. “Sitemap.xml” file should be added to Console, as Console, in its turn, will check the map for errors and will show the number of pages indexed.   Conclusions: all these technical aspects should be brought to an ideal state in order for the website to prevail over its competitors in SERP, as from year to year the competition grows in all spheres. Having the technical side in a perfect state makes it much easier to conquer Top. And it is much comfortable for the very users when the website is loading fast, when it is easy to read on the cell phone and no errors occur when you follow the links on the website.  Yurii, senior SEO expert at Visual Craft ]]> Fri, 05 Feb 2016 14:11:58 +0200 <![CDATA[iOS Auto Layout: Tips and Techniques]]> More and more tools and systems are appearing that increase productivity and make a developer’s life easier. iOS Auto Layout is one such resource, providing developers with the ability to run two apps at the same time, on an iPad or any size iPhone.  This post will cover the basics of Auto Layout and will be useful for those who want to learn how to use it for writing applications for both iPhone and iPad.  You will learn how to use Size Classes, layout elements view in the preview, constraints creation, the constraints size change and how to look through libraries using Auto Layout.  What is Auto Layout? Auto Layout is a dynamic system allowing developers to create user interfaces. It defines relationships between chosen elements and represents a high-powered, elastic system which defines the way views and UI controls interact with each other. iOS Auto Layout is able to do things earlier technologies could only imagine. As another plus, it is compatible with many of Apple’s most amazing application programming interfaces (APIs), like motion effects, animations and sprites. Specific libraries are designed to handle iOS Auto Layout: ReactiveCocoaLayout PureLayout Apple Auto Layout ReactiveCocoaLayout This is a framework designed to describe Cocoa and Cocoa Touch layouts in a reactive way. The framework is presently under development and exhibits premier alpha quality. However, significant changes may occur in the near future. ReactiveCocoaLayout (RCL) has the following advantages over Auto Layout: The layout is explicit and linear: RCL has a linear form, making it easier to grasp and debug the steps it follows on its way. The layout is top-down: the layout of a view doesn't relate to a superview one unless the size or frame of the former is clearly absent from the latter's layout chain, creating a one-way relationship, which leads to a better encapsulation (no global priorities!) and reduced complexity. Bidirectional relationships are still affordable, but should be clarified. At runtime the layouts are conditional: RCL is based on the full capacity of ReactiveCocoa and signals allow dynamic disabling and re-enabling for entire layout chains (to hide and show views) without actually changing them. The animations are implicit: in order to animate a view’s frame settings, just add the animation method to the signal chain. You do not need to animate all constants. The use is incremental: RCL may be used within views, requiring no additional implementations. It is extensible by nature: RCL may easily be extended, using your functionality to make the framework behave differently. It is not a black box: in contrast to UIKit and AppKit, you may crack any bit to see why it behaves one way or another. PureLayout PureLayout extends NSArray, NSLayoutConstraint and UIView/NSView with a comprehensive Auto Layout API modeled after a sample of Apple’s own frameworks. PureLayout is a cross-platform Objective-C library for Swift, completely backward compatible with all versions of iOS supporting Auto Layout. PureLayout provides a friendly interface for Auto Layout. It takes inspiration from AutoLayout UI options available in Interface Builder and delivers far more flexibility. PureLayout defines view attributes used to build auto layout constraints. There are 5 specific types of attributes used throughout the API: ALAxis ALEdge ALDimension ALMarginAxis available in iOS 8.0 and higher only ALMargin available in iOS 8.0 and higher only Methods of PureLayout used for class UIView (NSView) Click to show - autoSetContent(CompressionResistance|Hugging)PriorityForAxis: - autoCenterInSuperview(Margins) // Margins variant iOS 8.0+ only - autoAlignAxisToSuperview(Margin)Axis: // Margin variant iOS 8.0+ only - autoPinEdgeToSuperview(Edge:|Margin:)(withInset:) // Margin variant iOS 8.0+ only - autoPinEdgesToSuperview(Edges|Margins)(WithInsets:)(excludingEdge:) // Margins variant iOS 8.0+ only - autoPinEdge:toEdge:ofView:(withOffset:) - autoAlignAxis:toSameAxisOfView:(withOffset:|withMultiplier:) - autoMatchDimension:toDimension:ofView:(withOffset:|withMultiplier:) - autoSetDimension(s)ToSize: - autoConstrainAttribute:toAttribute:ofView:(withOffset:|withMultiplier:) - autoPinTo(Top|Bottom)LayoutGuideOfViewController:withInset: // iOS only Methods of PureLayout used for class NSArray Click to show // Arrays of Constraints - autoInstallConstraints - autoRemoveConstraints - autoIdentifyConstraints: // iOS 7.0+, OS X 10.9+ only // Arrays of Views - autoAlignViewsToEdge: - autoAlignViewsToAxis: - autoMatchViewsDimension: - autoSetViewsDimension:toSize: - autoSetViewsDimensionsToSize: -autoDistributeViewsAlongAxis:alignedTo:withFixedSpacing:(insetSpacing:)(matchedSizes:) - autoDistributeViewsAlongAxis:alignedTo:withFixedSize:(insetSpacing:) Methods of PureLayout used for class NSLayoutConstraint Click to show + autoCreateAndInstallConstraints: + autoCreateConstraintsWithoutInstalling: + autoSetPriority:forConstraints: + autoSetIdentifier:forConstraints: // iOS 7.0+, OS X 10.9+ only - autoIdentify: // iOS 7.0+, OS X 10.9+ only - autoInstall - autoRemove Apple Auto Layout Auto Layouts are necessary for any application today, whether it is written for an iPhone or iPad. This is due to constantly changing device sizes and new iOS features that make the available screen size dynamic for applications. Auto Layout Terminology Constraints Constraints are basic rules which specify the way different views must be set, when Auto Layouts are in use. Settings Constraints to View When setting constraints programmatically, use Strings in the Visual Format Language. The constraints are always installed on specific or generic size classes. Setting Constraints in Interface Builder Size Classes This feature allows you to lay out views for different screen sizes recognized as a Size Class. Size Classes may be regular or compact. Whenever a constraint is determined for Auto Layouts, it may be determined specifically for a particular Size Class or generally for all the Size Classes. Different Size Classes Intrinsic Content Size When doing design, Intrinsic Content Size is used to avoid ambiguity. Items like UILabels are able to adjust width automatically, which means they don't need Intrinsic Content Size to be defined. Auto Layouts and Auto Resizing Masks If you used Auto Resizing Masks, before using iOS Auto Layouts, you may benefit from the tips below to convert over to Auto Layouts. Auto Resizing masks may be translated into constraints with ease, if you set the property “translatesAutoresizingMaskIntoConstraints” to YES. Adopting iOS Auto Layouts in the Application Enabling iOS Auto Layouts: Prerequisites For a demo, you should choose the Single View application from Xcode templates and create a Universal Application to test it easily on both iPhone and iPad devices. Auto Layouts may be enabled by: Main.storyboard > Utilities Bar > File Inspector > Under Interface Builder Document section: select “Use Auto Layout” and use “Size Classes”. Enabling Auto Layouts and Size Classes Step 1: Constraints Install Let us assume there are two views, one over another. A different background color may be added to each one, making it easier to see Auto Layouts in operation. a) adding constraints to the interface builder Interface builder provides an opportunity for adding constraints to views in various ways. Some are interactive, such as control dragging or setting constraints between two views. When you open the storyboard, you will see three buttons: “Align”, “Pin” and “Resolve Auto Layout Issues” in the bottom toolbar of the editor on the right end. Given as an example, there are two views of a view controller on the screenshot below. Let us call them views A and B. To add Individual Constraints, there is a separate working scheme: choose view A; click on "Pin" button; deselect “Constrain to Margins”; expose values for spacing up to 10 on all four sides and choose lines for spacing; repeat steps 2-4 for view B; preview the results Adding Constraints As you can see, view B is not shown in the preview. The reason for that is there is not a proper relation between views A and B set. You may also notice a red warning in the Document Outline, which means that certain constraints are missing, and therefore we are not providing enough constraints for iOS to lay out the views. To resolve these issues, we may refer to Xcode interface builder. In this particular case, for example, you need views A and B to have equal heights. This means “Equal Heights” constraints should be added to resolve this issue. To add “Equal Heights” constraints, do the following: choose views “A” and “B”; click on the "Pin" button; choose “Equal Heights”. Hereby, the layout issues have been resolved and you are able to preview views A and B having equal heights now. Previewing after Adding Equal Heights Constraints b) adding constraints of iOS Auto Layout programmatically You may set constraints programmatically, and may learn this from the Apple guide. Step 2: Changes Preview Xcode interface builder provides a useful tool for inspecting layouts on various devices without running the application. Opening Preview Pane Step 3: Resolving Auto Layout Issues Interface Builder notifies of ambiguities, like unperformed or missing constraints, by showing warnings and adding orange borders around the frames. Alexander, iOS Developer at Visual Craft ]]> Thu, 21 Apr 2016 18:42:14 +0300 <![CDATA[Using WebSocket Protocol for Real-time Applications]]> WebSocket is a protocol designed for full-duplex communication channels using the same TCP connection. In 2011 WebSocket protocol has been claimed by IETF as RFC 6455. WebSocket API has been standardized in Web IDL by the W3C. WebSocket vs. HTTP WebSocket protocol provides full-duplex communication between a server and client, whereas HTTP does not support this mode; WebSocket protocol uses a single connection for a two-way communication, while HTTP requires the creation of a new connection for each new request; WebSocket protocol requires less overhead data than HTTP, which adds overhead data as it broadcasts headers for each new request. WebSocket only broadcasts headers for initial acknowledgement during HTTP protocol change. If a browser does not support WebSocket protocol, it may use long polling as a fallback. However, in this article we will refer to other ideas. WebSocket Applications WebSockets may be used for tracking and synchronization of all kinds. Common uses include: instant messaging, multiplayer games, real-time tracking, content streaming, shared document editing, real-time analytics, and push notifications. Library Overview In addition to libraries for Python, C++, Android and Javascript, the Autobahn Project enables open-source implementations of network protocols like The Web Application Messaging Protocol (WAMP). Socket.IO provides two-way, event-based communication in real-time, supporting a browser and server (e.g., node.js) simultaneously. ws This WebSocket implementation is simple to use and up-to-date against RFC-6455. Many consider it the fastest WebSocket library for node.js. Java EE Java EE features a special API for the WebSocket protocol corresponding to JSR 356, which supports the creation of WebSocket applications. WebSocket Example In this post, you will observe the implementation of a real-time app using WebSocket. The purpose of this app will be to track the coordinates of a device. Upon launch, it will execute the following steps: it begins to track its coordinates via GPS, when it updates the location, it sends the data to a server app in real-time, it updates the view in the browser, it enables you to view the position of the device on a map in the browser, ….. PROFIT! WebSocket Server App The simplest solution is using node.js as a server and “ws” and “express framework” for libraries. In this setup, the task for the WebSocket server is to gather updates of the Android device location and broadcast its position data to all connected listeners (for the convenience of all browser and Android devices). One more task the app handles is to disconnect devices, allowing removing on the side of the client (browser). To implement the proper server behavior, we must register the following event listeners (callbacks): connection, message, open, and close. Once a client is connected, it receives the locations of all devices from the ‘location update.’ Click to show // send all reported prevoiusly devices with their locations for (var key in lastLocations) { if (lastLocations.hasOwnProperty(key)) { ws.send(composeUpdateMessage(key, lastLocations[key])); } } Once the message on the location update is received, it broadcasts the location to all other clients from the device. To accomplish this, we must first define the broadcast method. Click to show // define broadcast method = simply sends the message to all connected clients wss.broadcast = function broadcast(data) { wss.clients.forEach(function each(client) { client.send(data); }); }; Click to show // broadcast location to all connected clients wss.broadcast(composeUpdateMessage(device, parsedMessage['location'])); When the connection between the device app and the server is closed, it broadcasts the message to notify all that the device is no longer available. Click to show // notify all the client about device disconnection wss.broadcast(composeRemoveMessage(device)); Browser App The browser app receives updates of the device location via JavaScript WebSocket and identifies the position on the map. Location reports will be displayed once the device is connected. When the device app closes, the location will disappear from the map. The app uses Google Maps API to display the current positions of devices. To view an example, you can obtain your own Google Maps API key from Google by clicking here. The embedded browser WebSocket implementation will be used. Listeners should be set to the following events: onopen, onclose, onerror, onmessage. Next, logic for the server messages of the ‘remove’ and ‘update’ type should be added. In case of removal, remove the marker from the map. Otherwise, update the marker position or create a new one. Click to show connection.onmessage = function (e) { var data = JSON.parse(; if (data['type'] == 'remove') { deviceManager.remove(data.device); } else { deviceManager.update(data['device'], data['location']); } // data received from the server console.log(; } Android App This app will send location updates to the server via JavaScript WebSocket. LocationServices API and Autobahn will be used for updating and communicating with WebSocket. When the app is active (onStart), it will begin receiving location updates and sending them to the server. When it is closed, it will disconnect and stop getting updates (onStop). First, the app receives location updates from LocationServices and sends them to the server immediately via WebSocket. In addition, it adds a unique device ID. This makes it possible to distinguish between devices. The WebSocket server uses a special service to communicate, called WebSocketService. This handles sending and receiving data from WebSocket using MyWebSocketHandler for receiving messages. Click to show private static final String TAG = "MyWebSocketHandler"; @Override public void onOpen() { Log.e(TAG, "Status: Connected to socket"); } @Override public void onTextMessage(String payload) { Log.e(TAG, "Got echo: " + payload); } @Override public void onClose(int code, String reason) { Log.e(TAG, "Connection lost."); } WebSocketService also listens to broadcasted messages, using Android local broadcast messages with a special intent. In addition, a special service called LocationService checks the location updates and sends broadcasted messages with a text payload. It uses FusedLocationApi to obtain location from Google Play Services. Click to show // register listener for location updates LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); Once the location is known, the service sends a broadcasted message containing a JSON encoded text. Click to show // send location to WebSocketService Intent i = new Intent(WebSocketService.ACTION_SEND); i.putExtra(WebSocketService.EXTRA_MESSAGE, composeJsonBody()); broadcastManager.sendBroadcast(i); They start and stop both services from the Activity. Click to show @Override protected void onStart() { super.onStart(); startService(new Intent(this, WebSocketService.class)); startService(new Intent(this, LocationService.class)); } @Override protected void onStop() { stopService(new Intent(this, LocationService.class)); stopService(new Intent(this, WebSocketService.class)); super.onStop(); } Notes This created solution allows connecting all user-tracking devices in real-time. JSON is used as a format for server-client communication. It is possible to use secure WebSockets (WSS). Yevgeniy, Android Developer at VisualCraft ]]> Wed, 25 May 2016 12:10:38 +0300 <![CDATA[SEO Questions, Rules and Mistakes of SEO Agency Clients Explained]]> Every search optimization project is unique. Niches and audiences differ and we make sure to study a business domain well enough to suggest improvements in various optimization aspects to avoid errors. However, while applying our developed set of optimization measures for every new project, sometimes we notice website owners and decision makers have misunderstood some basic approaches to optimization projects. Let’s review the most common false statements and explain their true meaning. The first statement: “A set of approved keywords must be used as many times as possible across multiple website pages” This is one of the most common SEO mistakes. Approved keywords must be consistently used on the promoted website page that is relevant to it. We single out important relevant pages in the beginning of the project and pay extra attention to them. These are the pages that potential customers find in organic searches while not knowing about the brand. If we use the key phrases from the semantic core multiple times across different website pages, this will result in competition in the search results between pages. Search engines will have difficulty defining which website page is most relevant to include in search results. Our aim is for every website page to have its own aspect to be uncovered. For example: if the website is about, let’s say, selling electronics, then you may not want to have two pages dedicated to selling TVs; every page should cover a new product and thus will require new keywords to be used. Conclusion: according to SEO rules if a page targets a keyword, it shouldn’t be used often on the other website pages. The second statement: “Consistent keyword usage on the page means the page will be in top by this keyword automatically” In the majority of cases this is not true, especially for mid and/or high-frequency keywords with mid and high competition levels. Even though some sources say that using keywords is not a major ranking factor anymore, it’s a myth. Keyword frequency and density on the page do matter, but to get higher rankings it is critical to know how to write website content right and how to build a proper backlink profile. This is why it is important to single out proper relevant website pages to concentrate SEO efforts on. What if we target a specific low-frequency keyword with low competition? This is the case when optimized content can start bringing organic search visitors to the page after it is indexed by the search engine. Such content often gets high positions in search engines due to a consistent usage of a targeted search query. Conclusion: in every SEO project there is a limited set of mid and/or high-frequency keywords together with the pages that are specifically optimized and promoted on the regular basis. To improve their ranking results it is necessary to spend time and resources for building an appropriate backlink profile for the site and its promoted pages. To get newly developed content ranked well in a search engine it makes sense to optimize it with low-frequency keywords from the semantic core that have low competition level. The third statement: “Website pages with no backlinks are not promoted” This is not quite true. Building a backlink profile of the website or webpage is a continuous process that should never stop; it requires a certain amount of time and resources. That’s why the main effort is directed towards a limited set of mid and/or high-frequency keywords and pages where they are targeted. If blogposts or landing pages are added to the site on the regular basis during the project – they will not necessarily be covered by backlinks because it increases the initial scope of work. At the same time, other general optimization measures still influence all existing and new pages of the website and improve their visibility in searches. For example: controlling important ranking factors such as speed of website loading, metadata duplicates, content uniqueness, website indexation process, URL structure, target audience settings, etc. Conclusion: during the project if a website gets new important pages that should be actively promoted, it is necessary to adjust the scope of the project to be able to build a proper backlink profile for them. If there is a need to optimize hundreds and thousands of similar pages – it is possible but the strategy is a bit different. It is necessary to develop templates and principles of automatic forming the metadata to avoid such common SEO mistakes as empty meta tags and content duplication. The fourth statement: “High quality content is all that search engines need to rank the page well” This is partially true but we have things to specify here. Website promotion nowadays is all about high quality, interesting and engaging content for users. What can be better? The answer is: well structured, tagged high quality, interesting and engaging content for users. If two competitive websites both have quality content – search engines will regard a number of other aspects besides domain age, its bounce rate and time spent on the page or website. It is better to help search engines index the content right and quick, as well as associate it with relevant search queries. Let's single out 2 aspects here: Using relevant low-frequency keywords will be useful because for such queries it will be easier to occupy high positions right after the content is indexed by the search engine. A SEO expert will tell you how many keywords per page should be used. To have feedback from a SEO expert necessary to provide one or several general ideas of the future piece of content. The expert will narrow them down to appropriate keywords to be used. The page must have right structure. It must have: a meaningful URL (short one), a meta title, a meta description, H1 tags (text name, stands above all other headings on the page), H2 and H3 tags (subheadings in the text), images with ALT and TITLE tags, numbered or bullet-point lists that structure the material for the user, and videos and infographics (illustrative elements that help people understand the material and keep users on the page). The above constituent parts of the page are always described in the technical assignment for creating and optimizing content.  The fifth statement: “One should use keywords as many times as possible without asking the expert “How many keywords should I use” No. Too many keywords is not too good. Search engines are smart nowadays and will be able to tell if the content is overloaded with keywords. An optimization expert will always take safe keyword density into account when creating an assignment for a copywriter, that’s why it is necessary to stick to the technical assignment. Using too many keywords in SM channels, SM posts, press releases and other pieces of content that don't go to the promoted website is also not needed. It does make sense to use them consistently throughout all online brand properties but first of all – on the promoted website. We do it to associate promoted website pages with particular queries. If it is done correctly, a search engine will suggest website pages to the users in searches. Using keywords in SM channels, press releases, etc. should look and sound natural. Here are some SEO rules about using key phrases: Keywords should be distributed evenly throughout the text. Try to place keywords as close to the beginning of the sentence as possible. You can insert punctuation marks between keyword components, it's okay. Don't use bold/underlined text formatting or other ways to highlight the keywords. Develop the new content right in the technical assignment document, it will be easier to check it. Remember that the content is written for the users, it is necessary to have a balance between the technical assignment and the actual content value for the reader. Vitalii, Head of SEO Department at Visual Craft ]]> Mon, 11 Jul 2016 17:31:20 +0300 <![CDATA[React Native for Building Hybrid Mobile Apps]]> There are two approaches in the world of mobile app development - native and hybrid.   Native app development Native applications are those you see the very first time you use a device. Examples of native applications include a browser, an email client, an address book, an alarm clock, a calendar and other standard programs that are built in by default. When a developer writes a mobile application using a programming language that is specific to a certain platform, e.g. Objective-C and Swift for iOS or Java for Android, that application is considered native. Native apps can access the operating system features of a phone such as the camera, microphone, geolocator, accelerometer, calendar, media files, notifications, etc. In a word, they grow roots and feel at home. Cross platform approach (hybrid applications) Imagine a mobile website that does not always need an internet connection, but which from a design standpoint is closer to mobile apps than to webpages! That is a rough description of cross-platform applications. They are often written in a markup language and style (HTML, CSS and JavaScript) that is similar to mobile websites, which is borne out by the fact that all Internet content consists of HTML pages. Such applications are written for all platforms simultaneously and are adapted to most devices. A browser engine usually does most of the work. Most professionals who create hybrid applications use Ionic, PhoneGap and Cordova frameworks, which allow the application to access hardware and software platform features. In addition, cross-platform development is available for Xamarin, Unity and other technologies, but they are not that popular for the development of web-based applications. User experience  The first thing a user expects from an application is responsiveness. This means instant feedback and smooth- flowing, uninterrupted page scrolling and animation. In this regard, cross-platform applications compare poorly to native ones and, quite honestly, they are slow. That is their main problem.  In addition, each control element and icon will have a standard form and a standard position on the app screen. However, these standards will be different for different  platforms. Thus, if a cross-  platform application has been built according to iOS guidelines, it will be uncomfortable for Android users and vice versa. The “back” button may be one of the best examples of this situation. It is a typical feature for Android, but there is no analogue for iOS. Therefore, when you create a cross-platform application, there are only two options – either the design is the same for both platforms and users of one are forced to adapt to it, or you create two different designs and take into account the peculiarities of each platform. In fact, in the latter case, two applications are created in the same cross-platform language and React Native is ideal for this. React Native is a hybrid mobile app development tool from Facebook for iOS and Android, based on the ReactJS library and designed to interact with native API platforms.   React Native does not use a browser or a WebView. Instead, it uses JavaScript API on top of native platform components only. As a result, it is an application with native elements and responsiveness. Advantages of React Native apps: Portable. More than half of the entire code can be ported to another platform. All of the application’s logic, except for the view elements (information display templates on the screen), can be migrated. Greater scalability. There is extensive API interaction with native elements in React Native, as well as many ready-made modules of third-party developers and the possibility to write Native Modules of your own. Many criticize React Native when speaking of JavaScript performance with respect to the "native" code. In fact, such technologies allow the best of both worlds — a sophisticated and concise JavaScript used to code the application logic, and a low-level code of c / c ++ / objective-c used for libraries and speed critical areas of logic. This approach allows the complexity of the application parts to be evenly spread, and avoids their accumulation in one place, which often leads to complications and unsupported code. Of course, there are very specific reasons for the popularity of native applications: Speed and responsiveness. As a rule, native applications are optimized for the platform on which they are launched in low-level languages. Support of complex gestures and nontrivial animation. Monotonous UI. Interfaces of various applications within the same operating system are designed approximately the same way. Of course, the components vary from application to application, but their operation principle is mostly the same. This means that if you learn the interface of one application, it will be easy to understand interfaces of other applications on the same OS. Despite the popularity of native applications, there are reasons why it is hard to create them: Different set of technologies. If you need to create a single application for both Android and iOS, you have to hire both Android and iOS developers. That is more expensive, of course. No code reuse. If, for example, you need to send a REST API-request to the cloud server, it is necessary to write to the services of both Android and iOS. Then, you have to write the same UI, some functions, etc., twice. A new build for every change. It takes a lot of time and slows down the speed of iterations. Igor, Developer at Visual Craft ]]> Wed, 20 Jul 2016 12:34:33 +0300 <![CDATA[How to Build a Private Blog Network (PBN) – Main Tips]]>   How to Build a PBN   Table of Contents 1. Introduction 2. PBN Pros and Cons 3. How to Build a PBN 4. SEO 5. Bottom Line   Introduction   It's no secret that every year it is becoming more and more difficult to get new backlinks. However, what’s most important, is that the backlinks should be of a high quality and bring in more positive results. Numerous experiments have proved that backlinks placed inside an article of a closely related topic are the most effective. Immediately therefore, the question arises of where to get such backlinks. One of the most effective methods for getting a high-quality effective backlink mass will be described in this post and concerns the creation of a private blog network (PBN) referring to the promoted site.    Experiments show that PBNs work very well because they contain only relevant sites. This allows for control of the backlinks and the very link building process as a whole.     Results depend on the quality of domains where the PBN sites are hosted.   As a link building technique, PBN has its pros and cons and it belongs to the so-called Grey hat SEO.   PBN Pros and Cons   The very process of building a site network with some closely related topics has the following disadvantages: It requires a significant financial cost. You need to buy domain names and order content. You have to have a detailed plan for the niche and a confidence to get the spent costs back if your keywords get to the TOP. Let’s say you want to get to the TOP of a moderately competitive niche of 30 donor sites: 30 domains * $12 = $360. Each site needs content of at least three posts. 30 sites * 3 posts = 90 posts. The average cost of one medium quality post written specifically for PBN post is $6. Thus, $540 for the content. $900 in total. It requires time to build and support the websites within a network. If the websites within the network were created in the wrong way and are not interlinked properly, Google may ban the whole network. The advantages include: Backlinks placed on the home pages of thematic websites give the best results in terms of getting TOP positions in Google search results. Backlinks from such networks may be used for other projects of related topics as well. PBN may be monetized. In case you do not need the network anymore, you may sell it or sell the backlinks coming from it. This methodology gives the promoted site a huge advantage over its competitors. If you’re lucky, there may be search traffic on the PBN sites which flows over the backlinks to the promoted resource. You fully control the backlinks. Once the promoted project is over, you may reuse the backlinks for a new project.   Let us summarize: there are more advantages than disadvantages in using a PBN.  If you approach this process competently, you will get much more success and your PBN will be long-lived.   How to Build a PBN   The process of building a PBN begins with the selection and purchase of a domain. These can be one of the following types: A dropped domain (may be chosen on; A new domain; A domain without breaking its history – bought at an auction (GoDaddy).   Choosing a domain by using parameters on   The chosen method will influence the promotion results of the main project. For example, a domain from an auction is expensive, but it will bring the best results.   Selecting and purchasing a domain on   Ordinary dropped domains work well too. However, you should check their backlinks carefully in order to avoid buying one with a spam anchor list and/or banned in Google. is a perfect toolset for checking the quality of backlinks:     Domains may be also checked for additional SEO parameters (recommended values are given below):     DA Value range: 18-32 An average value is 22.3     PA Value range: 29-49 An average value is 33.0     TF Value range: 10-22 An average value is 15.5 Surprisingly, new domains work well too. However, compared to the dropped domains mentioned above, you will need many more of them. There is a list of proven tips which allows for the building of a good PBN and which Google will like: Register each domain with at least two domain registrars and close Whois info. If you cannot close the Whois info, use different contact information for the domain owner. Do not buy all your network domains on the same day. Use as many different hostings as possible; famous companies with highly trusted sites on their IPs are preferable. This will make Google lose links between the network domains and you will have fewer risks from being banned by the search system. Authoritative hosting providers are GoDaddy, Hostgator, Bluehost, and Arvixe. CMSes, templates and the sets of plugins chosen for the sites should be different if possible. The sites should not look as if they belong to the same owner. No hit counters should be used. The placed uniques content should be left inviolable and in place for 30 days at least so Google search system can index it. Only after that, you can add more articles in small doses. To create sites you can use the site recovery method from web archive. In this way, you will be able to save money on content and the sites’ designs. The last thing you should do is to close PBN sites for all possible bots, like those from Ahrefs or SemRush. Therefore, no one can find the network and complain about it. Only the bots of search systems should have access.   PBN sites will be lost amongst a huge number of trusted sites SEO   After the blogs have been created and are steady in Google index, you can gradually begin to place backlinks coming in to the main promoted resource. Donor sites should be present in Google index for at least 30 days; only then they are ready for placing backlinks. A backlink anchor list should be compiled. These backlinks will be placed in posts within the PBN. At short intervals of time (3-5 days) backlinks coming to the promoted site are placed one by one. There should also be other backlinks referring to authoritative thematic sites of types such as .gov and .edu as well as images (at least one image per post). Backlinks should look natural so there is no trace of artificiality. The results of placing such backlinks should be monitored constantly, and the right frequency of placing them should be chosen according to these results.   Bottom Line   In this post, we have described briefly the process and nuances of building and operating an effective PBN. This method is expensive since it involves the purchase of domains, content, hosting and is labor-intensive in terms of configuration and support. Therefore, the decision to create a PBN should be taken based on its cost recovery and profitability. To our knowledge, 20-30 sites for a PBN will be enough for a low-competitive niche. Mid-competitive niches need more than 50 sites. It is worth considering that there may be bad sites or problematic domains. Moreover, not less than 200 sites are needed for such highly competitive themes as loans for example.   Yurii, senior SEO expert at Visual Craft ]]> Fri, 20 Oct 2017 12:30:49 +0300